【发布时间】:2020-06-15 08:02:10
【问题描述】:
class Example
fun main(){
val example: Example = Example()
// what function i am calling is it fun Example.extensionFun() ?
// Or is it Example.extensionFun(string: String) ?
example.extensionFun()
}
// first extension function
fun Example.extensionFun(){
println("Hey i'm first extension function")
}
// second extension function
fun Example.extensionFun(testArgument: String = "test argument "){ // argument just to change the function signature
println("Hey i'm second extension function ")
}
在上面的示例中,我创建了两个名称相同但签名不同的扩展函数。 当我尝试打电话时->
example.extensionFun()
然后 IDE 只是调用“有趣的 Example.extensionFun()”
但即使我尝试打电话
fun Example.extensionFun(testArgument: String ="test argument")
通过使用代码完成弹出窗口并选择第二个扩展功能,它再次调用
fun Example.extensionFun()
因此它给我留下了调用第二个扩展函数的唯一方法,即通过为 testArgumet(参数)传递不同的值。例如。
example.extensionFun("different value")
但是在很多情况下,我们不想在调用函数参数的时候改变它的默认值。
我认为我发现了一个错误,但请分享您的意见
【问题讨论】:
-
这不是错误。 编译器/语言,而不是 IDE,如果你在没有字符串的情况下调用它,就无法知道你要调用哪个方法。换句话说,代码确实是模棱两可的。
标签: kotlin intellij-idea jetbrains-ide kotlin-extension