12

ケース クラスを定義するとき、デフォルトのコンパニオン オブジェクトにはcurried、ケース クラス コンストラクターのカリー化されたバージョンを取得するための優れたメソッドがあります。

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)

4

1 に答える 1