2016-09-25 7 views
0

caseクラスAを3つの整数パラメータ、b,cdと定義したいとします。 bcを指定する必要があります。dを指定するか、デフォルトでc + 1と見なす必要があります。パラメータのデフォルト値を別のパラメータ値の純関数に設定するにはどうすればよいですか?

次のように私はこれを定義します

case class A(b: Int, c: Int, d = c + 1) 
をしかし、これは動作しません。正しい形式は何ですか?

Scalaではこれが可能であることを覚えていますが、どのようにこれを行うことができるのか覚えていません。

+0

これがScalaで可能かどうかはわかりません。 1つのオプションは、2つのパラメータをとり、デフォルト値を最後の値にするコンパニオンオブジェクトに 'A'の' apply 'を定義することです。 – JSchlather

+0

@JSchlatherそれだけです。これを回答として提出すれば、私はそれを承認するでしょう。 – Ivan

+0

@JSchlatherそれは、事例クラスのために特に有用ではない可能性があります。 –

答えて

3
case class A(b: Int, c: Int)(val d: Int = c + 1) 

A(1, 1)().d // 2 

でも!これは、メソッドと非クラスのための良い解決策です。ただし、ケースクラスの場合、自動的に生成されるメソッド(equalshashCodeapply、およびunapply)は、最初のパラメータリストのみを扱うため、これはほぼ確実に目的を果たしません。したがって、この場合は@ JSchlatherの提案に従ってください。

2

単純な解決策は、望ましい置換を持つコンパニオンオブジェクトに適用することです。

case class A(b: Int, c:Int, d: Int) 

object A { 
    def apply(b: Int, c:Int): A = A(b, c, c + 1) 
} 
関連する問題