有没有办法做这样的事情
class Foo (val bar:Any, val baz:Any = magic(bar))
没有重载构造函数或使baz
可变吗?
答案 0 :(得分:8)
您应该使用不同的参数组:
def test(i: Int)(j: Int = i + 1) = i + j
test(1)()
// Int = 3
class Foo (val bar: Int)(val baz: Int = bar + 1)
new Foo(1)().baz
// Int = 2
对于构造函数,您还可以使用None
作为构造函数参数的默认值,然后在类体中定义val
:
class Foo (val bar: Int, _baz: Option[Int] = None) {
val baz = _baz.getOrElse(bar + 1)
}
new Foo(1).baz
// Int = 2
请注意,对于case class
,您不能使用不同的参数组(如果要获取unapply
中的所有参数),也不能使用类体。唯一的方法是在随播对象中定义一个加法apply
方法。