2015-09-06 69 views
0

以下:暧昧参考超载定义

object SomeObj { 
    def addVertex(cc: Product): String = ??? 
    def addVertex(cc: AnyRef): String = ??? 
} 

case class Toto(s: String) 

SomeObj.addVertex(Toto("")) 

做:

Error:(8, 10) ambiguous reference to overloaded definition, 
both method addVertex in object SomeObj of type (cc: Object)String 
and method addVertex in object SomeObj of type (cc: Product)String 
match argument types (A$A34.this.Toto) 
SomeObj.addVertex(Toto(""));} 
     ^

为什么?不应该为最具体的一个?
有趣的是Any而不是AnyRef它的作品。

干杯

+0

不是真的,你的例子对我没有提及的错误。你使用的是什么版本的Scala? – Mifeet

回答

0
trait Product extends Any with Equals 
trait Equals extends Any 

在这里你可以看到,Product没有延伸AnyRef,而不是从它衍生出来的,所以它并不比AnyRef更加具体和编译器不能选择其中。但ProductAny的子类,因此它比Any更具体,这就是为什么您的另一个变体成功编译的原因。