Не понимаю, почему работает этот код на kotlin

Есть простой код на kotlin:

fun repeat(
  times: Int,
  action: (Int) -> Unit           // [1]
) {
  for (index in 0 until times) {
    action(index)                 // [2]
  }
}

fun my(){
  println("xxx")
}

fun main() {
  repeat(3) { my() }
}

Объясните, почему main() печатает:

xxx
xxx
xxx

Ведь, вроде бы, функция repeat требует, чтобы последний lambda-параметр принимал Int на вход, а у меня функция my определена вообще без параметров...


Ответы (1 шт):

Автор решения: Eugene Krivenja

my() не передается как action. action в вашем случае это { my() }.

Чтобы передать именно my() как action придется добавить параметр и передать ссылку на функцию.

fun my(i: Int){
    println("xxx - $i")
}

fun main() {
    repeat(3, ::my)
}

Вывод будет:

xxx - 0
xxx - 1
xxx - 2
→ Ссылка