2012-07-11 44 views
5

thể trùng lặp:
Why does one select Scala type members with a hash instead of a dot?'#' có nghĩa là gì trong thông số loại?

đôi khi tôi nhìn thấy một số loại như:

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

Ai đó có thể xin giải thích những gì '#' có nghĩa là trong tham số kiểu này? Có hạn chế nào đối với K không?

+0

http://stackoverflow.com/questions/2183954/referring-to-the-type-of-an-inner-class-in-scala –

Trả lời

3

Không, số # là phép chiếu loại. Tuy nhiên, trong trường hợp của bạn không hoạt động vì K không xác định bất kỳ loại BAR nào.

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) 
} 

Điều đó về cơ bản cho phép bạn sử dụng loại T trong A bên trong MyClass.

Trong thực tế, cũng là biên dịch sau:

class MyClassImpl extends MyClass[AImpl] {def applySeq(): Traversable[Int] = List(10)}