对重载定义的模糊引用

时间:2015-09-06 21:21:56

标签: scala

以下内容:

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

干杯

1 个答案:

答案 0 :(得分:0)

trait Product extends Any with Equals 
trait Equals extends Any

在这里,您可以看到Product未扩展AnyRef而不是从AnyRef派生,因此它并不比Product更具体,编译器无法在其中进行选择。但AnyAny的子类,因此它比results_shown更具体,这就是您的另一个变体成功编译的原因。