参数的默认值如何引用另一个参数?如果不能,如何解决这个问题?
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)
^
答案 0 :(得分:19)
这要求您使用多个参数列表:
case class A(x: Int)(y: Int = x*2)
默认值只能引用前面列表中的参数。
但是要小心使用case类,因为它们的相等性只会将第一个参数列表放入帐户中,因此:
A(1)() == A(1)(3) // --> true!!
答案 1 :(得分: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)