Почему функции имеют приоритет над похожими на свойства вызываемыми объектами в той же области видимости? - PullRequest
5 голосов
/ 10 февраля 2020

Я только что заметил что-то интересное при тестировании кода и хотел бы получить больше объяснений. Почему функции имеют приоритет над лямбдами, когда они находятся в одной области видимости?

Например:

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))

В этом случае я использую invoke() для вызова лямбда-функции вместо функции .

1 Ответ

6 голосов
/ 10 февраля 2020

Раздел Overload спецификации языка kotlin касается этого, он заявляет

Когда При вычислении наборов кандидатов на перегрузку вызываемые элементы создают следующие отдельные наборы (, упорядоченные по приоритету в первую очередь ):

Member function-like callables;
Member property-like callables.

, но в спецификации все еще, кажется, работа в процессе, так как она содержит много TODO, один конкретный c TODO, который будет иметь отношение к вашему вопросу, находится в ссылочных ссылках раздел

TODO (Мы можем получить новую неоднозначность между реквизитами и забавами с одним и тем же именем)

Так что, кажется, можно получить определенный ответ, вам придется подождать, пока не наступит срок действия спецификации языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...