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

标签 scala

有没有办法做这样的事情

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/

相关文章:

java - 玩Scala模板,定义对象变量

python - scala 中是否有等同于 python reduce() 函数的函数?

scala - 如果调用 Some(null) 我应该如何抛出异常?

Scala -> 函数

java - 从 Scala 调用 Java Generic Typed Method 会出现类型不匹配错误 : Scala

斯卡拉这是什么意思? "{/* compiled code */}"

scala - Play 2 - Scala - 表单验证器和单选按钮

spring - Spring Elastic Search存储库将不存储数据

scala - 新的 scala Dynamic 类型有什么作用?

Scala,我可以将类构造函数参数(未定义为隐式)作为隐式值传递吗?