2012-01-15 35 views
2

我如何可以指定一個未應用的高階類型參數的邊界,使得下列編譯:對於未應用類型類型界限參數

trait Declr[Impl[_]] // need to specify constraints for Impl's type parameter 

trait Sys[S <: Sys[S]] 

object X extends Declr[X] // doesn't compile, because S is more strict 
trait X[S <: Sys[S]] 

無需添加更多的類型參數Declr。請注意,允許解決方案假定Impl的參數的界限是總是S <: Sys[S](即,這是任何可以進入Declr的類型的界限)。

我想我可以用一個類型成員這樣寫的約束:

trait Declr { 
    type Impl[S <: Sys[S]] 
} 

object X extends Declr { 
    type Impl[S <: Sys[S]] = X[S] 
} 
trait X[S <: Sys[S]] 

但如何做到這一點的類型參數(爲type Impl重述很嘈雜,我想要使object X儘可能乾淨)?

回答

4

爲什麼不

trait Declr[Impl[S <: Sys[S]]] 
trait Sys[ S <: Sys[ S ]] 

object X extends Declr[ X ] 
trait X[ S <: Sys[ S ]] 
+0

我感到困惑。我確信我已經嘗試過,並且不接受第一條線。但顯然,現在我編譯你的代碼,它的工作原理: - #對於噪音抱歉... – 2012-01-15 21:35:22