2013-08-20 138 views
3

我有以下類別:Understaing抽象類型

abstract class Base { 
    type T 
    def myMethod: T 
} 

abstract class B extends Base { 
    type T <: String 
} 

abstract class C extends Base { 
    type T <: Int 
} 

現在,如果我這樣寫:

class Test{ 
    self: B with C => 
    // do sth with myMethod 
} 

myMethod的會導致int類型的某物。另一方面,如果我寫這個:

class Test{ 
    self: C with B => 
    // do sth with myMethod 
} 

我會得到類型的字符串。有人可以解釋嗎?

回答

0

是的,我可以!這是a bug!根據Martin Odersky本人的說法,這是「Scala的類型系統中的一個基本問題」的結果(請參閱關於該問題的意見以供討論,並且還有今天早些時候的this question)。