Странная лямбда в Котлине - PullRequest
0 голосов
/ 11 сентября 2018

Я могу присвоить следующую лямбду переменной.

val whatIsThat = {n: Int -> Int}

Но что это значит?Как ни странно, я могу выполнить whatIsThat (2)

println(whatIsThat(2))

, и результатом будет kotlin.jvm.internal.IntCompanionObject.Может быть, это «секретная функция»?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Давайте расширим вашу декларацию, явно указав ее тип:

val whatIsThat: (Int) -> Int.Companion = { n: Int -> Int}

Полагаю, вы ожидали, что тип будет (Int) -> Int, верно?Но используемый вами синтаксис не является объявлением типа, это фактическое лямбда-тело.Ваша лямбда принимает Int и возвращает Int синглтон, тип которого Int.Companion.

0 голосов
/ 11 сентября 2018

Похоже, вы печатаете объект-компаньон для Int, а не для экземпляра Int.Если вы используете val whatIsThat = { n: Int -> Int.Companion }, вы получите тот же результат.Кажется, что непреднамеренный побочный эффект от способа обработки сопутствующих объектов в Kotlin.

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