有没有办法使用'+';在Scala中作为泛型类型传递给方法的参数上添加运算符?

有没有办法使用'+';在Scala中作为泛型类型传递给方法的参数上添加运算符?,scala,generics,polymorphism,add,Scala,Generics,Polymorphism,Add,我最近发现了Scala,并编写了一个RK4解算器,我正试图尽可能地推广它。在使用任意大的系统后,我想让它使用任意数字数据类型,但我遇到了麻烦。当我使用泛型数据类型时,无论我对其设置了什么限制,Scala都会自动将所有内容转换为字符串,以使用“+” 到目前为止,我尝试过的大部分内容最终都是以不同的方式编写相同的内容。我可以显式地将所有内容转换为我将使用的最高精度类型(BigDecimal),并将其命名为day,但这忽略了推广函数的大部分意义 这不是我的全部RK4程序,但它是我在过去几个小时里一直在

我最近发现了Scala,并编写了一个RK4解算器,我正试图尽可能地推广它。在使用任意大的系统后,我想让它使用任意数字数据类型,但我遇到了麻烦。当我使用泛型数据类型时,无论我对其设置了什么限制,Scala都会自动将所有内容转换为字符串,以使用“+”

到目前为止,我尝试过的大部分内容最终都是以不同的方式编写相同的内容。我可以显式地将所有内容转换为我将使用的最高精度类型(BigDecimal),并将其命名为day,但这忽略了推广函数的大部分意义

这不是我的全部RK4程序,但它是我在过去几个小时里一直在使用的一段代码:

def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)
它是向量和(数学向量,数据结构只是巧合),它接受两个向量并返回一个向量,其中每个元素是输入向量中两个对应元素的和

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

使用

  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)
}

谢谢,这两个都很好用!但我很好奇:为什么第一个更受欢迎?