首页 文章

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

提问于
浏览
1

我知道如何将时间作为 repeat 函数的第一个参数:

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

但是我检查了Kotlin文档,它显示了另一个参数 action 要使用(参见kotlin doc):

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

我尝试了这段代码,但因错误Expecting ')'而失败:

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

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

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

3 回答

  • 0

    什么是(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")
    }
    
  • 2

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

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

    如果您需要lambda中的整体迭代次数,您也可以预先在其外部声明一个变量( val ):

    val i = 3
    repeat(i) {
        println("iteration $it of $i")
    }
    

相关问题