gpt4 book ai didi

kotlin - 为什么 Kotlin 需要函数引用语法?

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

Kotlin 文档声明它支持 higher-order functions .为什么在传递顶级函数作为参数时,语言甚至需要 ::function 语法?

给定:

fun isOdd(x: Int) = x % 2 != 0
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd)) // here.

为什么不直接

fun isOdd(x: Int) = x % 2 != 0
val numbers = listOf(1, 2, 3)
println(numbers.filter(isOdd)) // simple and makes more sense

更多关于 function reference syntax here .

最佳答案

Kotlin 语言设计试图避免模棱两可的情况,即某些内容的缺失可能同时是正确和不正确的语法。例如,如果您允许建议的语法:

isOdd     // error, function invocation expected isOdd(...)
isOdd // not error, you have a function reference

:: 是关于意图的明确信号。因此,在 isOdd 情况下您只会得到一个错误,因为您现在有不重叠的可能性:

isOdd      // error, function invocation expected isOdd(...)
::isOdd // function reference
isOdd() // error, missing parameter x
isOdd(x) // function call

这就是 Kotlin 避免导致模棱两可状态的事情的原因。您的眼睛也可以快速发现问题,就像 IDE 和静态分析一样,就像编译器一样。如果您开始允许这种更宽松的语法,您将开始遇到复杂的歧义,例如在使用 as 中缀函数时等等。语言设计比“哦,让我们让他们输入更少的字符”更复杂,因为如果你只看一个用例而忽略所有其他用例,复杂度矩阵比你想象的要大得多。

关于kotlin - 为什么 Kotlin 需要函数引用语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43396499/

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