可能重复:
Why does one select Scala type members with a hash instead of a dot?
我有时会看到类似参数:
class Test[K] {
type T = Foo[K#Bar]
}
有人可以解释这个类型参数中“#”的含义吗?这是K
的某种限制吗?
答案 0 :(得分:3)
不,#是一种类型投影。但是在你的情况下,这不起作用,因为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)}
答案 1 :(得分:0)
'#'用于突出显示另一种类型的类型。请参阅问题this answer的"Why does one select Scala type members with a hash instead of a dot"?