fun test() {
class Test(val foo: ((Double, Double) -> Double)?)
val test = Test(null)
if(test.foo != null) test.foo(1.0, 2.0)
}
上面的代码产生了错误:
Kotlin: Reference has a nullable type '((Double, Double) -> DoubleArray)?', use explicit '?.invoke()' to make a function-like call instead.
如果我遵循错误建议并将调用更改为 test.foo?.invoke(1.0, 2.0)
,代码会编译,但 IntelliJ 现在会报告
Unnecessary safe call on a non-null receiver of type '((Double, Double) -> DoubleArray)
根据该建议,我最终得到了 test.foo.invoke(1.0, 2.0)
,我认为它可以与 test.foo(1.0, 2.0)
; 互换;为什么这里不是这样?
当 foo 不是类成员时,事情会按我的预期工作:
fun test2() {
val foo: ((Double, Double) -> Double)? = null
if(foo != null) foo(1.0, 2.0)
}
最佳答案
有一个 Unresolved 问题:https://youtrack.jetbrains.com/issue/KT-4113
目前,它的目标版本是 1.3。
关于kotlin - 为什么必须用invoke调用类成员函数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157172/