2016-08-30 4 views
2

私の値クラス(下記)のパラメータを検証する必要があります。しかし、私はIf値クラスの文

この文は、コンパイル時に値クラス

では許可されていないエラーを取得、これを回避する方法はありますか?ありがとう。 (SIP-15が最初の場所に存在する理由です)

case class Size(val size: Long) extends AnyVal { 
    if (size < 0) throw new IllegalArgumentException; // error 
    def +(s: Size): Size =Size(size + s.size) 
} 
+0

あなたの問題は 'size'パラメータだと思います。 valueクラスは別のvalueクラスの別の値のパラメータになることができないためです。 –

+0

http://docs.scala-lang.org/sips/completed/value-classes.html、つまり「Cには初期化文がない可能性があります。 –

+1

こちらをご覧ください:http://stackoverflow.com/questions/33136558/validations-in-value-classes – Samar

答えて

5

バリュークラスは、既存のオブジェクトのラッパーであるため、Scalaは実際にインスタンス化値クラスオブジェクトではないが、代わりに基本的なオブジェクトを使用します。したがって、初期化コードを置く場所がなく、実行時チェックsizeは単純に不可能です。