为什么函数引用可以调用 FuncRef.invoke() 而函数不可以调用 Func.invoke() 呢?

来源:5-3 运算符与中缀表达式

滥觞LanShang

2022-12-03

fun main() {
    // 下述代码没有报错
    val funcRef = ::add
    funcRef.invoke(1, 2)
    // 下述代码报错
    add.invoke(1, 2)
}

fun add(a: Int, b: Int) = a + b
写回答

1回答

滥觞LanShang

提问者

2022-12-03

懂了,funRef 是 Function2 类的对象,invoke 则是函数类的方法。

0
1
bennyhuo
对。add 是函数名,不是函数引用,如果使用函数名调用函数,就直接 add(1, 2) 就行了。这个跟 C/C++ 当中还是不一样的,C/C++ 当中的函数名可以当成函数地址去用,Kotlin 当中不行。
2022-12-04
共1条回复

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程