gpt4 book ai didi

scala - 伴侣上的 curry 案例类构造函数

转载 作者:行者123 更新时间:2023-12-04 01:13:40 27 4
gpt4 key购买 nike

定义案例类时,默认伴随对象有 nice curried获取案例类构造函数的柯里化(Currying)版本的方法:

scala> case class Foo(a: String, b: Int)
defined class Foo

scala> Foo.curried
res4: String => (Int => Foo) = <function1>

但是,一旦我定义了一个明确的伴随对象,这个方法就会消失:
scala> :paste
// Entering paste mode (ctrl-D to finish)

case class Foo(a: String, b: Int)
object Foo {}

// Exiting paste mode, now interpreting.

defined class Foo
defined module Foo

scala> Foo.curried
<console>:9: error: value curried is not a member of object Foo
Foo.curried

我可以像这样找回它:
scala> :paste
// Entering paste mode (ctrl-D to finish)

case class Foo(a: String, b: Int)
object Foo { def curried = (Foo.apply _).curried }

// Exiting paste mode, now interpreting.

defined class Foo
defined module Foo

scala> Foo.curried
res5: String => (Int => Foo) = <function1>

但是,我想知道为什么它在定义显式伴侣时会消失(例如,与 apply 相比)?

(斯卡拉 2.9.2)

最佳答案

Scalac 为每个 case class 创建一个默认同伴.默认伴侣实现 scala.Function n.

当您定义显式伴侣时,Scalac 会将显式伴侣与默认伴侣合并。

如果你想调用 curried ,你必须让你的显式同伴实现 Function2 .尝试:

case class Foo(a: String, b: Int)
object Foo extends ((String, Int) => Foo) {
def otherMethod = "foo"
}

关于scala - 伴侣上的 curry 案例类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com