Kotlin - 在重复功能中使用动作参数

时间:2018-05-15 01:33:55

标签: kotlin

我知道如何将时间作为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 :(得分:2)

  

什么是(Int) - >单位以及如何正确使用动作参数?

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

答案 1 :(得分:1)

  

我知道我有语法错误。所以我的问题是:什么是(Int)    - >单位以及如何正确使用动作参数?

repeat(3) {
    println("This will print 3 times, $it cycle number")
}

答案 2 :(得分:0)

如果您需要在lambda中进行迭代的总数,还可以预先在其外部声明变量(ngFor):

val