我想创建一个行为如下的类(或更好的案例类):
case class MyClass(n: Int, m: Int = 2 * n)
因此,它m
可能具有基于的默认值n
。但似乎这是不可能的,斯卡拉说:not found: value n
. 第一个想法是如果它仍然是 -1,则在构造函数中编写m: Int = -1
和变异它,但它是val
. 现在我没有任何其他想法。
也许有人会阐明这里有什么可能?
您可以显式提供第二个工厂:
case class MyClass(n: Int, m: Int)
object MyClass{
def apply(n: Int): MyClass = MyClass(n, 2 * n)
}
与@om-nom-nom 的答案中使用 2 个参数列表不同,case 类不受影响,特别是您可以像往常一样进行模式匹配以同时提取n
和m
。
您必须定义一个伴随对象:
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)