'#'在类型参数中意味着什么?

时间:2012-07-11 07:42:40

标签: scala type-parameter

  

可能重复:
  Why does one select Scala type members with a hash instead of a dot?

我有时会看到类似参数:

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

有人可以解释这个类型参数中“#”的含义吗?这是K的某种限制吗?

2 个答案:

答案 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"