3

次のように動作するクラス(またはより適切なケースのクラス)を作成したいと思います。

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

したがって、mに基づくデフォルト値を持つことができますn。しかし、それは不可能のようです、とscalaは言います:not found: value n。最初のアイデアはm: Int = -1、それがまだ-1の場合、コンストラクターでそれを記述して変更することですが、それはvalです。そして今、私には他のアイデアはありません。

たぶん誰かがここで何が可能かについて光を当てるだろうか?

4

2 に答える 2

3

2番目のファクトリを明示的に提供できます。

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

@ om-nom-nomの回答のように2つのパラメーターリストを使用する場合とは異なり、ケースクラスは影響を受けません。特に、通常どおりパターンマッチを使用して、との両方を抽出できnますm

于 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 に答える