有没有办法做这样的事情
class Foo (val bar:Any, val baz:Any = magic(bar))
无需重载构造函数或制作
baz
可变的?
最佳答案
您应该使用不同的参数组:
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
伴生对象中的方法。
关于Scala 默认参数值派生自以前的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768690/