在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
}
答案 0 :(得分:10)
不可能有两个具有默认参数且名称相同的方法。 Scala生成方法以获取具有基于目标方法名称的名称的默认值,因此可能发生某种名称冲突。
scala> object Test {
| def m(i: String = "Default value") {}
| }
defined module Test
scala> Test.`m$default$1`
res0: String = Default value
答案 1 :(得分:5)
您没有显示您的代码,但这是一个简单的示例:
object C {
def addAnim(x: Int = 42) {}
def addAnim(y: String = "abc") {}
}
如果我现在打电话:
C.addAnim()
应该调用哪个方法?对象C
将无法编译,因为编译器无法在不提供任何参数时猜测您所指的addAnim
方法。
答案 2 :(得分:3)
为什么不将两种方法合二为一,也可以将w和h作为选项,例如
def addAnim (name: String,
x: Float, y: Float,
tex: Buffer[Texture],
fps: Int,
percent: Float = 0,
w: Float = Float.NaN, h:Float = Float.NaN): TImageSequence