Scala默认参数值派生自先前的参数

Tac*_*irl 7 scala

有没有办法做这样的事情

class Foo (val bar:Any, val baz:Any = magic(bar))
Run Code Online (Sandbox Code Playgroud)

没有重载构造函数或使baz变量?

sen*_*nia 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
Run Code Online (Sandbox Code Playgroud)

对于构造函数,您还可以使用None构造函数参数的默认值,然后val在类体中定义:

class Foo (val bar: Int, _baz: Option[Int] = None) {
  val baz = _baz.getOrElse(bar + 1)
}
new Foo(1).baz
// Int = 2
Run Code Online (Sandbox Code Playgroud)

请注意,case class您不能使用不同的参数组(如果要获取所有参数unapply)或类体.唯一的方法是apply在伴随对象中定义一个加法方法.