我只是在测试代码时注意到一些有趣的事情,我想要更多的解释。为什么函数在同一作用域内的优先级高于 lambda?
例如 :
fun sum(x: Int, y:Int) = x + y
val sum = { x: Int, y: Int -> x + y }
// here, the compiler use the fonction (first line) and not the lambda
println(sum(1, 2))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我使用invoke()
lambda 而不是函数。
kotlin 语言规范的Overload
解析部分确实涉及到这一点,它指出
在计算重载候选集时,成员可调用对象生成以下单独的集(按优先级高的优先级排序):
Run Code Online (Sandbox Code Playgroud)Member function-like callables; Member property-like callables.
但该规范似乎仍在进行中,因为它包含许多 TODO,一个与您的问题相关的特定 TODO 位于Callable 参考部分
TODO(我们可能会在同名的 props 和 funs 之间产生新的歧义)
所以似乎得到了肯定的答案,你将不得不等到语言规范成熟。
归档时间: |
|
查看次数: |
86 次 |
最近记录: |