2011-07-30 42 views
2

我試圖編譯下面的代碼的參數範圍:斯卡拉this.type符合型超

class MyClass { 
    def foo(): this.type = Helper.bar(this) 
} 

class ChildClass extends MyClass 

object Helper { 
    def bar[A <: MyClass](cls: A): A = cls 
} 

產生的編譯錯誤是:

type arguments [MyClass.this.type] do not conform to method bar's type parameter bounds [A <: MyClass] 

有什麼我可以做用上面提供的方法簽名來製作這個編譯屬性?看起來好像MyClass.this.type應該是一個validClass,並且我不希望在調用Helper時(一次在路上,一次在路上)施放兩次。

回答

4

單態類型從來沒有被推斷過。你必須寫

Helper.bar[this.type](this) 
+0

啊,我剛剛意識到我在REPL中測試,如果類在REPL中的單獨行上定義,我會收到編譯錯誤,但如果它們被粘貼一個街區,一切似乎都沒問題。謝謝你的幫助! –

+0

爲什麼不能推斷單身人士類型? – kassens