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