gpt4 book ai didi

kotlin - 为什么必须用invoke调用类成员函数类型?

转载 作者:IT老高 更新时间:2023-10-28 13:45:20 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com