16

パラメータのデフォルト値はどのようにして別のパラメータを参照できますか? できない場合、それを回避するにはどうすればよいですか?

case class A(val x:Int, val y:Int = x*2)

エラー (合理的に十分):

scala> case class B(val x:Int, val y:Int = x*2)
<console>:7: error: not found: value x
   case class B(val x:Int, val y:Int = x*2)
                                       ^
4

2 に答える 2

22

これには、複数のパラメーター リストを使用する必要があります。

case class A(x: Int)(y: Int = x*2)

デフォルト値は、前述のリストのパラメーターのみを参照できます。

ただし、ケース クラスには注意してください。それらの等価性は最初のパラメーター リストのみを考慮に入れるためです。したがって、次のようになります。

A(1)() == A(1)(3)  // --> true!!
于 2013-06-15T16:37:55.047 に答える
10

回避策を求めたので、ケースネスを維持する方法が明らかでない場合:

scala> :pa
// Entering paste mode (ctrl-D to finish)

case class Foo(x: Int, y: Int)
object Foo {
  def apply(x: Int): Foo  = apply(x, 2*x)
}

// Exiting paste mode, now interpreting.

defined class Foo
defined object Foo

scala> Foo(5,6)
res45: Foo = Foo(5,6)

scala> Foo(5)
res46: Foo = Foo(5,10)
于 2013-06-15T19:07:42.717 に答える