Kotlin - использовать параметр действия в функции повтора

Я знаю, как передать время в качестве первого параметра функции 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 и как правильно использовать параметр действия?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 006
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Спасибо за быстрый ответ! Я все еще смущен этим: (Int) -> Unit описывает функцию, которая принимает Int и возвращает Unit (void). Но когда я пытаюсь использовать repeat(3, {anotherFunction()}), кажется, что anotherFunction() не принимает никаких параметров Int?

shisaq 15.05.2018 03:55

@shisaq Я напишу ваш вызов функции более подробно: repeat(3, { it: Int -> anotherFunction()}) Вы вызываете функцию из лямбды. У вас есть параметр Int, но вы никогда его не используете.

Eugen Pechanec 15.05.2018 10:09

@EugenPechanec Спасибо! Это мне очень помогло! Я получил правильный синтаксис и знал, как передать параметр в anotherFunction: repeat(3, { it: Int -> anotherFunction(it)}). Причина, по которой я сделал ошибку, заключается в том, что я не знаком с лямбдой.

shisaq 15.05.2018 15:42

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

Другие вопросы по теме