我有时会看到一个类型参数,例如:
class Test[K] {
type T = Foo[K#Bar]
}
有人可以解释一下这个类型参数中的“#”是什么意思吗?这是某种限制K
吗?
我有时会看到一个类型参数,例如:
class Test[K] {
type T = Foo[K#Bar]
}
有人可以解释一下这个类型参数中的“#”是什么意思吗?这是某种限制K
吗?
不,# 是类型投影。但是,在您的情况下,这不起作用,因为 K 没有定义任何 BAR 类型。
trait A {
type T
def apply():T
}
trait MyClass[X<:A] {
type SomeType = X#T
def applySeq():Traversable[SomeType]
}
class AImpl extends A {
type T=Int
def apply():Int = 10
}
class MyClassImpl extends MyClass[AImpl] {
def applySeq(): Traversable[SomeType] = List(10)
}
这基本上让您可以在 MyClass 中使用 A 中的类型 T 。
其实也可以如下编译:
class MyClassImpl extends MyClass[AImpl] {def applySeq(): Traversable[Int] = List(10)}
'#' 用于投影出包含在另一种类型中的类型。请参阅问题“为什么选择 Scala 类型成员时使用散列而不是点”的答案?