我刚刚在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
答案 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}类型的一些隐式(在范围内某处填充T
或implicit val
)另一个类型implicit def
和另一个类型ST[T]
。例如,最后一个为NUM[T]
提供了各种类型级别的操作。