Scala 对重载定义的引用不明确
以下是:Scala 对重载定义的引用不明确,scala,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 addVe
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
可以工作
干杯
在这里您可以看到,Product
并没有扩展AnyRef
,也不是从中派生出来的,因此它并不比AnyRef
更具体,编译器无法从中进行选择。但是Product
是Any
的子类,因此它比Any
更具体,这就是为什么您的另一个变体编译成功的原因
在这里您可以看到,
Product
并没有扩展AnyRef
,也不是从中派生出来的,因此它并不比AnyRef
更具体,编译器无法从中进行选择。但是Product
是Any
的一个子类,因此它比Any
更具体,这就是为什么您的另一个变体编译成功的原因。不太可能,您的示例对我来说没有提到的错误。您使用的是什么版本的Scala?不完全是,您的示例对我来说没有提到的错误。您使用的是什么版本的Scala?
trait Product extends Any with Equals
trait Equals extends Any