2011-07-30 43 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