为什么"模糊地引用过载的定义"对于具有不同签名的方法?

时间:2018-04-24 14:30:24

标签: scala overload-resolution

我知道有关此错误的其他一些问题,但其他问题非常清楚,为什么会出现错误。就我而言,我无法理解为什么。这是一个简短的例子:

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 ^

这是&#34;正常&#34; /预期?

1 个答案:

答案 0 :(得分:1)

B.text一方面可以被视为从特征text调用A方法,另一方面可以视为来自B的eta扩展方法,它将返回Seq[String] => String

类型的函数