为什么函数优先于相同范围内的类似属性的可调用对象?

Jéw*_*ôm' 5 lambda kotlin

我只是在测试代码时注意到一些有趣的事情,我想要更多的解释。为什么函数在同一作用域内的优先级高于 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 而不是函数。

mig*_*WOZ 6

kotlin 语言规范Overload解析部分确实涉及到这一点,它指出

在计算重载候选集时,成员可调用对象生成以下单独的集(按优先级高的优先级排序):

Member function-like callables;
Member property-like callables.
Run Code Online (Sandbox Code Playgroud)

但该规范似乎仍在进行中,因为它包含许多 TODO,一个与您的问题相关的特定 TODO 位于Callable 参考部分

TODO(我们可能会在同名的 props 和 funs 之间产生新的歧义)

所以似乎得到了肯定的答案,你将不得不等到语言规范成熟。