2016-09-21 13 views
0

私はクラス計算の中で実行される数値型を取るスカラでジェネリッククラスを作成しようとしています。目標は、さまざまな数学型をテンプレート引数として使用することです。 は、どのように私は仕事にこれを取得することができます:スカラ、テンプレート型パラメータを持つ数学

def plus[T <: AnyVal](v1: T <:< AnyVal, v2: T <:< AnyVal): T = { 
    v1 + v2 
} 

so that I can do this: 
val t1 = 4, t2 = 5 
val t3 = plus(t1, t2) 
or 
val t3: Int = plus[Int](t1, t2) 

答えて

2

あなたは型クラスを使用する必要があるとしています。 Spireを参照してください。実際には、待ってはいけません.Spireを使用してください。それは本当にかなり信じられないし、できるだけボクシングを避けるために最適化されています。

あなたがスパイアを使用したくない場合は、ここで私は型クラスで何を意味するかの例です。

trait Add[A] 
    def apply(x: A, y: A): A 
} 

def plus[A](x: A, y: A)(implicit add: Add[A]) = add(x, y) 

そして、あなたは、あなたがサポートしたいすべてのタイプのための型クラスを定義する必要があります。

関連する問題