Scala将具有复杂类型的方法添加到最终类
我正在尝试向Scala将具有复杂类型的方法添加到最终类,scala,vector,types,Scala,Vector,Types,我正在尝试向Vector类添加点积方法。我试过这样的方法: class MatrixVector[T <: Numeric[T]] extends Vector[T]{ def dot(vector: MatrixVector[T]): T = { this.zip(vector).map(t => t._1 + t._2).sum } } 这会导致类型错误,我甚至不确定使用隐式类的类型约束是否有意义 如何使用具有复杂类型的方法扩展最终类 scala> i
Vector
类添加点积方法。我试过这样的方法:
class MatrixVector[T <: Numeric[T]] extends Vector[T]{
def dot(vector: MatrixVector[T]): T = {
this.zip(vector).map(t => t._1 + t._2).sum
}
}
这会导致类型错误,我甚至不确定使用隐式类的类型约束是否有意义
如何使用具有复杂类型的方法扩展最终类
scala> implicit class dotProd[T](v1: Vector[T])(implicit ev:Numeric[T]) {
def dot(v2: Vector[T]): T = v1.zip(v2).map(t => ev.times(t._1, t._2) ).sum // see (*) at the bottom
}
defined class dotProd
scala> Vector(1,2,3).dot(Vector(10,10,10))
res0: Int = 60
Numeric不是由数值类型扩展的类。是一个类型类。Numeric的一个示例实例是,此类不表示Int,而是可以对Int执行的数值操作
(*)顺便说一句,你最初的定义是添加向量的元素,这不是正确的点积
Numeric不是由数值类型扩展的类。是一个类型类。Numeric的一个示例实例是,此类不表示Int,而是可以对Int执行的数值操作
(*)顺便说一句,你最初的定义是添加向量的元素,这不是正确的点积
scala> implicit class dotProd[T](v1: Vector[T])(implicit ev:Numeric[T]) {
def dot(v2: Vector[T]): T = v1.zip(v2).map(t => ev.times(t._1, t._2) ).sum // see (*) at the bottom
}
defined class dotProd
scala> Vector(1,2,3).dot(Vector(10,10,10))
res0: Int = 60