次のような型パラメータを時々見かけます。
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 型メンバーを選択するのはなぜですか」という質問に対するこの回答を参照してください。