默认case类参数取决于其他参数scala

时间:2016-12-19 17:41:20

标签: scala case-class

scala我不允许执行以下操作:

case class Terminal(value: Double, name: String = value.toString)

而且我也不能这样做:

case class Terminal(value: Double)(name: String = value.toString)

我理解构造函数不支持多参数列表方法。

有没有办法在apply方法中定义才能实现这一目标?

预期行为:

Terminal(1.0) // => Terminal (1.0, "1.0")

2 个答案:

答案 0 :(得分:6)

您不能在案例类本身中执行此操作,并且它不会创建构造函数,但可以通过随附的apply方法实现。

case class Terminal(value: Double, name: String)
object Terminal {
  def apply(value: Double): Terminal = Terminal(value, value.toString)
}

请注意:

def apply(value: Double, name: String = value.toString) = new Terminal(value, name)

是错误,因为它与自动生成的apply冲突。

答案 1 :(得分:1)

也许你只想要这个?

case class Terminal(value: Double) {
    val name = a.toString
}