Kotlin - использовать параметр действия в функции повтора - PullRequest
0 голосов
/ 15 мая 2018

Я знаю, как передать время в качестве первого параметра функции repeat:

repeat(3) {
  println("This will print 3 times")
}

Но я проверил документацию Kotlin, она показывает, что есть еще один параметр action для использования (см. kotlin doc ):

inline fun repeat(times: Int, action: (Int) -> Unit)

Я попробовал этот код, но потерпел неудачу с ошибкой Ожидается ')' :

repeat(3, 2 -> anotherFun()) {
    println("This will show 2 times?")
}

fun anotherFun() {
    println("head into the 2nd time and print this out.")
}

Я знаю, что у меня ошибка синтаксиса. поэтому мой вопрос: что такое (Int) -> Unit и как правильно использовать параметр action?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Я знаю, что у меня ошибка синтаксиса. поэтому мой вопрос: что такое (Int) -> Единица и как правильно использовать параметр действия?

repeat(3) {
    println("This will print 3 times, $it cycle number")
}
0 голосов
/ 22 января 2019

Если вам нужно общее количество итераций внутри лямбды, вы также можете заранее объявить переменную (val) вне нее:

val i = 3
repeat(i) {
    println("iteration $it of $i")
}
0 голосов
/ 15 мая 2018

что такое (Int) -> Unit и как правильно использовать параметр действия?

(Int) -> Unit описывает функцию, которая принимает Int и возвращает Unit (недействительным).Чтобы назвать его как есть, вы можете сделать это следующим образом:

repeat(3, {anotherFunction()})

или

repeat(3) {
    anotherFunction()
}

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

public inline fun repeat(times: Int, action: (Int, Int) -> Unit) {
    for (index in 0 until times) {
        action(times, index)
    }
}

И тогда вы можете использовать его так:

repeat(3) { times, i ->
    println("Called $i/$times")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...