Я знаю, как передать время в качестве первого параметра функции repeat:
repeat(3) {
println("This will print 3 times")
}
Но я проверил документацию Kotlin, она показывает, что есть еще один параметр action, который можно использовать (см. Котлин док):
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 и как правильно использовать параметр действия?





what is (Int) -> Unit and how to use the action parameter properly?
(Int) -> Unit описывает функцию, которая принимает Int и возвращает Unit (void). Чтобы назвать это как есть, вы можете сделать это так:
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")
}
@shisaq Я напишу ваш вызов функции более подробно: repeat(3, { it: Int -> anotherFunction()}) Вы вызываете функцию из лямбды. У вас есть параметр Int, но вы никогда его не используете.
@EugenPechanec Спасибо! Это мне очень помогло! Я получил правильный синтаксис и знал, как передать параметр в anotherFunction: repeat(3, { it: Int -> anotherFunction(it)}). Причина, по которой я сделал ошибку, заключается в том, что я не знаком с лямбдой.
I know I have got the syntax error. so my question is: what is (Int) -> Unit and how to use the action parameter properly?
repeat(3) {
println("This will print 3 times, $it cycle number")
}
Если вам нужно общее количество итераций в лямбде, вы также можете заранее объявить переменную (val) вне ее:
val i = 3
repeat(i) {
println("iteration $it of $i")
}
Спасибо за быстрый ответ! Я все еще смущен этим: (Int) -> Unit описывает функцию, которая принимает Int и возвращает Unit (void). Но когда я пытаюсь использовать
repeat(3, {anotherFunction()}), кажется, чтоanotherFunction()не принимает никаких параметровInt?