可能重複:
Why does one select Scala type members with a hash instead of a dot?'#'在類型參數中的含義是什麼?
我有時會看到這樣一種類型的參數:
class Test[K] {
type T = Foo[K#Bar]
}
可有人請解釋一下什麼是 '#' 這種類型的參數,意味着什麼?是否對K
有某種限制?
可能重複:
Why does one select Scala type members with a hash instead of a dot?'#'在類型參數中的含義是什麼?
我有時會看到這樣一種類型的參數:
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)}
「#」用於投影出封閉在另一類型的類型。問題"Why does one select Scala type members with a hash instead of a dot"見this answer?
http://stackoverflow.com/questions/2183954/referring-to-the-type-of-an-inner-class-in-scala – 2012-07-11 07:45:35