Scala,带有模板类型参数的数学

时间:2016-09-21 13:51:04

标签: scala templates

我正在尝试在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)

1 个答案:

答案 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)

您必须为您希望支持的每种类型定义类型类。