有没有办法在 Scala 中使用“+”运算符作为传递给方法的参数的附加作为泛型类型?
Is there a way to use the '+' operator as addition on parameters passed to a method as a generic type in Scala?
我最近发现了 Scala,并且我编写了一个 RK4 求解器,我试图尽可能地概括它。在让它与任意大的系统一起工作后,我想让它与任意数字数据类型一起工作 - 但我已经 运行 撞墙了。当我使用通用数据类型时,无论我对其施加什么限制,Scala 都会自动将所有内容转换为字符串以使用 '+'。
到目前为止,我尝试过的大部分内容最终都是以不同的方式编写相同的内容。我可以将所有内容显式转换为我将使用的最高精度类型 (BigDecimal),然后收工,但这忽略了概括函数的大部分要点。
这不是我的整个 RK4 程序,但它是我在过去几个小时里一直在搞砸的一段代码:
def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)
它是向量和(数学向量,数据结构只是巧合),它接受两个向量和return一个单个向量,其中每个元素是输入向量中两个对应元素的总和.
我正在尝试将它变成 return 与输入具有相同数字类型的向量,但它只想吐出一个字符串向量。
使用
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)
}
我最近发现了 Scala,并且我编写了一个 RK4 求解器,我试图尽可能地概括它。在让它与任意大的系统一起工作后,我想让它与任意数字数据类型一起工作 - 但我已经 运行 撞墙了。当我使用通用数据类型时,无论我对其施加什么限制,Scala 都会自动将所有内容转换为字符串以使用 '+'。
到目前为止,我尝试过的大部分内容最终都是以不同的方式编写相同的内容。我可以将所有内容显式转换为我将使用的最高精度类型 (BigDecimal),然后收工,但这忽略了概括函数的大部分要点。
这不是我的整个 RK4 程序,但它是我在过去几个小时里一直在搞砸的一段代码:
def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)
它是向量和(数学向量,数据结构只是巧合),它接受两个向量和return一个单个向量,其中每个元素是输入向量中两个对应元素的总和.
我正在尝试将它变成 return 与输入具有相同数字类型的向量,但它只想吐出一个字符串向量。
使用
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)
}