Scala - 奇怪的编译错误(方法的多个重载替代定义默认参数)

non*_*com 8 scala

在Scala IDE中,我收到有关我要编译的类的以下错误:

在对象MapArea中,方法addAnim的多个重载替代定义了默认参数.

是的,他们做到了!所以呢?我不明白这个哲学......

更新:

事实证明,可能存在编译器无法知道选择哪种方法的情况(正如Tomasz Nurkiewicz所指出的那样),我理解......但在我的情况下,可以清楚地区分这两种方法.这是确切的代码片段(这次保留了所有原始名称和内容):

  def addAnim (name: String, x: Float, y: Float, tex: Buffer[Texture], fps: Int, percent: Float = 0): TImageSequence =
    addAnim (name, x, y, tex(0).getImage.getWidth, tex(0).getImage.getHeight, tex, fps, percent)

  def addAnim (name: String, x: Float, y: Float, w: Float, h: Float, tex: Buffer[Texture], fps: Int, percent: Float = 0): TImageSequence = {
     // do stuff
  }
Run Code Online (Sandbox Code Playgroud)

sen*_*nia 10

不可能有两个具有默认参数且名称相同的方法.Scala生成方法以获取具有基于目标方法名称的名称的默认值,因此可能发生某种名称冲突.

scala> object Test {
     |   def m(i: String = "Default value") {}
     | }
defined module Test

scala> Test.`m$default$1`
res0: String = Default value
Run Code Online (Sandbox Code Playgroud)


Tom*_*icz 5

您没有显示您的代码,但这是一个简单的示例:

object C {
  def addAnim(x: Int = 42) {}
  def addAnim(y: String = "abc") {}
}
Run Code Online (Sandbox Code Playgroud)

如果我现在打电话:

C.addAnim()
Run Code Online (Sandbox Code Playgroud)

应该调用哪个方法?该对象C将无法编译,因为编译器无法addAnim在不提供任何参数时猜测您的意思.