如何将参数默认值设置为另一个参数值的纯函数?

时间:2016-09-25 19:40:44

标签: scala class default-value

假设我们要定义3个整数参数的案例类Abcd。必须指定bc,默认情况下,d应指定或视为等于c + 1

我将其定义如下:

case class A(b: Int, c: Int, d = c + 1)

但这不起作用。什么是正确的形式?

据我所知,Scala可以实现这一点,但我无法记住如何做到这一点。

2 个答案:

答案 0 :(得分:3)

runas /netonly /user:<account> devenv.exe

但是!对于方法和非case class A(b: Int, c: Int)(val d: Int = c + 1) A(1, 1)().d // 2 类,这是一个很好的解决方案。但是,对于案例类,这几乎肯定不会达到您想要的效果,因为自动生成的方法(caseequalshashCodeapply)只关心第一个参数列表。因此,对于这种情况,请遵循@ JSchlather的建议。

答案 1 :(得分:3)

一个简单的解决方案是对具有所需替换的伴随对象进行应用。

case class A(b: Int, c:Int, d: Int)

object A {
   def apply(b: Int, c:Int): A = A(b, c, c + 1)
}