我正在尝试实现一个通用的 Scala 方法,该方法处理类型为 Float 或 Double 的 Breeze 向量(至少,特异性较低)。这是 Vector[Double] 的一个简单示例:
def vectorSum(vectors: Seq[Vector[Double]]): Vector[Double] = {
vectors.reduce { (v1, v2) => v1 :+ v2 }
}
我对 Scala 和 Breeze 有点陌生,所以我使这个通用的天真的方法是:
def vectorSumGeneric[T <: AnyVal](vectors: Seq[Vector[T]]): Vector[T] = {
vectors.reduce { (v1, v2) => v1 :+ v2 }
}
但是,这会引发以下编译错误:
diverging implicit expansion for type breeze.linalg.operators.OpAdd.Impl2[breeze.linalg.Vector[T],breeze.linalg.Vector[T],That] starting with method v_v_Idempotent_OpAdd in trait VectorOps
not enough arguments for method :+: (implicit op: breeze.linalg.operators.OpAdd.Impl2[breeze.linalg.Vector[T],breeze.linalg.Vector[T],That])That. Unspecified value parameter op.
我尝试了一些变体,包括T <% AnyVal
and T <% Double
,但它们也不起作用(可能正如预期的那样)。Scala 文档类型边界没有给我关于这样的用例的线索。解决这个问题的正确方法是什么?