使用以前成员的表达式的Scala类构造函数默认参数

时间:2013-02-05 12:05:54

标签: scala syntax

我想创建一个类(或更好的案例类),其行为如下:

case class MyClass(n: Int, m: Int = 2 * n)

因此m可以根据n设置默认值。但似乎这是不可能的,斯卡拉说:not found: value n。第一个想法是编写m: Int = -1并在构造函数中将其变异,如果它仍为-1,但它是val。现在我没有任何其他想法。

也许有人会对这里的可能性有所了解吗?

2 个答案:

答案 0 :(得分:3)

您可以明确提供第二家工厂:

case class MyClass(n: Int, m: Int)
object MyClass{
  def apply(n: Int): MyClass = MyClass(n, 2 * n)
}

与在@ om-nom-nom的答案中使用2个参数列表不同,案例类不受影响,特别是您可以照常匹配模式以提取nm。< / p>

答案 1 :(得分:0)

您必须定义一个伴侣对象:

scala> :paste
// Entering paste mode (ctrl-D to finish)

case class MyClass(n: Int, m: Int);

object MyClass {
def apply(n: Int) : MyClass = new MyClass(n, n * 2)
}

// Exiting paste mode, now interpreting.

defined class MyClass
defined module MyClass

scala> MyClass(12);
res4: MyClass = MyClass(12,24)