鉴于方法:
String[] foo(int i){#doSomething;}
String[] foo(double i){#doesSomethingDifferent;}
是否可以写foo(int i){return foo(double d);}
这样它就不会运行递归foo(int i){return foo(int i);}
?
虽然我知道不会以任何方式推荐这个,但我正在寻找哪些机制会允许或不允许它?
答案 0 :(得分:3)
它应该自动发生。重载背后的想法是方法签名不应该完全相同,尤其是方法参数。当您将double
值作为参数传入时,它将调用foo(double d)
。当您将int
作为参数传递时,它将调用foo(int i)
。为确保调用double
方法,您可以使用double
转换为(double)x
,其中x
是整数。)
答案 1 :(得分:3)
您可以尝试String[] foo(int i){return foo((double) i);}
。这样您就明确告诉编译器从foo(double d)
调用foo(int i)
。所以不会进行递归调用。
在重载的情况下,当使用某个参数调用方法时,编译器会尝试查找最适合传递的参数的方法。在您的情况下,如果您只是调用String[] foo(int i){return foo(i);}
,则会调用foo(int i)
版本,因为它最适合传递的参数(类型int
)。这就是为什么要调用double
版本的foo
,你必须告诉编译器传递的参数类型为double
。
答案 2 :(得分:2)
通过传递实际参数隐式指定将要调用的方法。
for _ in op.0.characters {
self.calc.add(Int(nr1)!, secondNumber: Int(nr2)!)
}