我正在尝试实现适用于不同类型矢量的通用函数,这些矢量可以是真实的、二进制的和混合的。Mixt 被包裹在一个由实数和二进制部分组成的类中。
import spire.math.{Numeric => SNumeric}
// basic function working on any kind of vectors
def f[O, D <: Distance[O]](data: GenSeq[O], metric: D) = ...
// function working on real and binary vectors
def f[@specialized(Int, Double) N: SNumeric, V[N] <: Seq[N], D <: DistanceSeq[N, V[N]]](data: GenSeq[V[N]], metric: D) = ...
在哪里
// general distance definition
trait Distance[O] extends Serializable {
def d(o1: O, o2: O): Double
}
// Real and binary distance definitions
trait DistanceSeq[@specialized(Int, Double) N, V <: Seq[N]] extends Distance[V]
f
调用和专业化是否DistanceSeq
有效地加快了方法应用程序的速度?有没有更好的方法来实现它?
我还想知道我是否在f
没有相应通用参数的情况下调用它会自动选择非常专业的方法还是我需要指定通用参数以便它采用最好的方法。