我正在尝试在Scala中创建一个泛型类,它接受类数学中的数字类型。目标是使用不同的数学类型作为模板参数。 我怎样才能让它发挥作用:
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)
答案 0 :(得分:2)
您将需要使用类型类。见Spire。实际上,没有等待,只需使用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)
您必须为您希望支持的每种类型定义类型类。