为什么 "ambiguous reference to overloaded definition" 用于具有不同签名的方法?
Why "ambiguous reference to overloaded definition" for methods with different signatures?
我知道还有很多关于此错误的其他问题,但其他问题很清楚为什么会出现错误。就我而言,我不明白为什么。这是一个简短的例子:
trait A {
def text: String = "abc"
}
case object B extends A {
def text(s: Seq[String]): String = s.mkString
}
现在,调用 B.text
我希望能明确解析为从基本特征继承的方法,因为对象 B 中的方法甚至不匹配调用签名...但是,错误!
<console>:13: error: ambiguous reference to overloaded definition,
both method text in object B of type (s: Seq[String])String
and method text in trait A of type => String
match expected type ?
B.text
^
这是"normal"/预期的吗?
B.text
一方面可以认为是从特征 A
调用 text
方法,另一方面可以认为是 B
的 eta 扩展方法,它将return Seq[String] => String
类型的函数
我知道还有很多关于此错误的其他问题,但其他问题很清楚为什么会出现错误。就我而言,我不明白为什么。这是一个简短的例子:
trait A {
def text: String = "abc"
}
case object B extends A {
def text(s: Seq[String]): String = s.mkString
}
现在,调用 B.text
我希望能明确解析为从基本特征继承的方法,因为对象 B 中的方法甚至不匹配调用签名...但是,错误!
<console>:13: error: ambiguous reference to overloaded definition,
both method text in object B of type (s: Seq[String])String
and method text in trait A of type => String
match expected type ?
B.text
^
这是"normal"/预期的吗?
B.text
一方面可以认为是从特征 A
调用 text
方法,另一方面可以认为是 B
的 eta 扩展方法,它将return Seq[String] => String