我想创建一个类(或更好的案例类),其行为如下:
case class MyClass(n: Int, m: Int = 2 * n)
因此m
可以根据n
设置默认值。但似乎这是不可能的,斯卡拉说:not found: value n
。第一个想法是编写m: Int = -1
并在构造函数中将其变异,如果它仍为-1,但它是val
。现在我没有任何其他想法。
也许有人会对这里的可能性有所了解吗?
答案 0 :(得分:3)
您可以明确提供第二家工厂:
case class MyClass(n: Int, m: Int)
object MyClass{
def apply(n: Int): MyClass = MyClass(n, 2 * n)
}
与在@ om-nom-nom的答案中使用2个参数列表不同,案例类不受影响,特别是您可以照常匹配模式以提取n
和m
。< / 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)