0

ラップするタイプに応じて、さまざまなメソッドを使用できるラッパー クラスを実装したいと考えています。

私はこのようなことを念頭に置いています:

case class Wrapper[A](val : A)

case class Wrapper[A : Numeric](val a : A) {
    def add[A](a : A) = new Wrapper(this.a + a)
}

val a = new Wrapper(1.0)
val b = new Wrapper(2.0)
val c = a add b
val d = new Wrapper(new Object)

val e = a add d // Compile Error!

渡されたパラメーターをType Class -Pattern で制限できることは既にわかっていますが、タイプが制限されていない場合、これは明らかにエラーにつながる可能性がthisあります。

これはscala型システムでも可能ですか? 同様の結果を達成するための型安全なパターン (ここでは中置記法が重要です) を大歓迎します。

4

1 に答える 1

0

この種の制約をメソッドに直接追加できますadd:

case class Wrapper[A](value : A){
  def add(other : A)(implicit ev : A <%< Numeric[A]) = 
    Wrapper(value.plus( other))
}

ではないaddインスタンスを呼び出すと、コンパイラ エラーが発生します。ANumeric

(@AlexIvに感謝を更新)

使用法:

val a = Wrapper(1.0)
val b = Wrapper(2.0)
val c = a add b
于 2013-09-29T18:38:54.170 に答える