链式模板参数声明的含义是什么?

时间:2015-03-10 09:14:18

标签: scala

我刚刚在Scala中偶然发现了这样的代码,并且不理解它的含义:

def combineByFrame[RX: ST: ORD, CX: ST: ORD, CXX: ST: ORD, T: ST: NUM: TypeTag](inputFrame: Frame[RX, CX, T], combineFrame: Frame[RX, CX, CXX], combineClosure: Function1[Vec[T], T]): Frame[RX, CXX, T] = {
   // ...
}

我不明白的是链式模板声明,例如以下RX: ST: ORD

1 个答案:

答案 0 :(得分:2)

这是类型类表示法。 <{1}}是

的缩写
def foo[A: B](a: A)

这意味着有一些def foo[A, B[A]](a: A)(implicit b_evidence: B[A]) 事物可以了解B。如果你有多个,你可以用冒号链接它们(丑陋,我知道)。

因此,A表示泛型类型T: ST: NUM: TypeTag必须具有{{1}类型的一些隐式(在范围内某处填充Timplicit val)另一个类型implicit def和另一个类型ST[T]。例如,最后一个为NUM[T]提供了各种类型级别的操作。