3

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

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

因此,它m可能具有基于的默认值n。但似乎这是不可能的,斯卡拉说:not found: value n. 第一个想法是如果它仍然是 -1,则在构造函数中编写m: Int = -1和变异它,但它是val. 现在我没有任何其他想法。

也许有人会阐明这里有什么可能?

4

2 回答 2

3

您可以显式提供第二个工厂:

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

与@om-nom-nom 的答案中使用 2 个参数列表不同,case 类不受影响,特别是您可以像往常一样进行模式匹配以同时提取nm

于 2013-02-05T12:10:25.060 回答
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)
于 2013-02-05T12:14:38.970 回答