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 回答