2016-05-04 8 views
0

私の質問は簡単です。このコードがないのに対し、Scala:タイプエイリアスと上限のタイプマッチング

は、なぜ、このコードは、エラーを作る

abstract class A { 
    type T <: A.Inner 
    def toT: T = new A.Inner(this) 
} 

object A { 
    class Inner(a: A) 
} 

// Exiting paste mode, now interpreting. 

<console>:16: error: type mismatch; 
found : A.Inner 
required: A.this.T 
     def toT: T = new A.Inner(this) 
        ^

のでしょうか?

abstract class A { 
    type T = A.Inner 
    def toT: T = new A.Inner(this) 
} 

object A { 
    class Inner(a: A) 
} 

// Exiting paste mode, now interpreting. 

defined class A 
defined object A 

A.Inner <: A.Inner。ではない?ここで

答えて

2

、下限を使用する必要があります。TA.Innerの祖先である場合にのみ、

abstract class A { 
    type T >: A.Inner 
    def toT: T = new A.Inner(this) 
} 

object A { 
    class Inner(a: A) 
} 

は、その後、A.InnerはTに変換することができます。制限するために下限を使用しますTは祖先であるA.Innerです。

+0

OK。私は反共に慣れていないようです... – Naetmul

関連する問題