5

重複の可能性:
ドットの代わりにハッシュを使用して Scala 型メンバーを選択するのはなぜですか?

次のような型パラメータを時々見かけます。

class Test[K] {
  type T = Foo[K#Bar]
}

この型パラメータの「#」の意味を誰か説明してもらえますか? に対するある種の制限Kですか?

4

2 に答える 2

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)}
于 2012-07-11T08:46:19.817 に答える
0

'#' は、別の型に囲まれた型を投影するために使用されます。「ドットの代わりにハッシュを使用して Scala 型メンバーを選択するのはなぜですか」という質問に対するこの回答を参照してください。

于 2012-07-11T10:15:18.257 に答える