有没有一种方法可以在传递给方法的参数上使用'+'运算符作为Scala中的泛型类型?

时间:2019-05-03 06:21:00

标签: scala generics polymorphism add

我最近发现了Scala,并且编写了一个RK4求解器,试图尽可能地概括一下。在使其与任意大型系统一起使用后,我想使其与任意数字数据类型一起使用-但我遇到了麻烦。当我使用通用数据类型时,无论我受到什么限制,Scala都会自动将所有内容转换为字符串以使用'+'。

到目前为止,我尝试过的大多数最终都以不同的方式写了同样的东西。我可以将所有内容显式转换为我将要使用的最高精度类型(BigDecimal)并每天调用它,但是这错过了泛泛化该函数的许多要点。

这不是我的整个RK4程序,但这是我在过去几个小时中一直使用的唯一代码:

def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)

这是向量和(数学向量,数据结构只是巧合),它接受两个向量并返回一个向量,其中每个元素是输入向量中两个对应元素的和。

我试图让它返回与输入具有相同数字类型的向量,但它只想吐出一个字符串向量。

1 个答案:

答案 0 :(得分:1)

使用

  def vecSum[T](u: Vector[T], v: Vector[T])(implicit o: Numeric[T]): Vector[T] = (u, v).zipped.map((x, y) => o.plus(x, y))

如果您特别想使用+,则可以使用

import Numeric.Implicits._
def vecSum2[T: Numeric](u: Vector[T], v: Vector[T]): Vector[T] = {
  (u, v).zipped.map((x, y) => x + y)
}
相关问题