我最近发现了Scala,并且编写了一个RK4求解器,试图尽可能地概括一下。在使其与任意大型系统一起使用后,我想使其与任意数字数据类型一起使用-但我遇到了麻烦。当我使用通用数据类型时,无论我受到什么限制,Scala都会自动将所有内容转换为字符串以使用'+'。
到目前为止,我尝试过的大多数最终都以不同的方式写了同样的东西。我可以将所有内容显式转换为我将要使用的最高精度类型(BigDecimal)并每天调用它,但是这错过了泛泛化该函数的许多要点。
这不是我的整个RK4程序,但这是我在过去几个小时中一直使用的唯一代码:
def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)
这是向量和(数学向量,数据结构只是巧合),它接受两个向量并返回一个向量,其中每个元素是输入向量中两个对应元素的和。
我试图让它返回与输入具有相同数字类型的向量,但它只想吐出一个字符串向量。
答案 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)
}