如何调整我的 Kotlin 高阶函数以采用参数



Kotlin我有以下内容:

fun ViewManager.controlButton(body: () -> Unit) = frameLayout {
...
}
private fun captureAndInsert() {
    println("captureAndInsert is called!")
}

Anko视图中:

controlButton(this@MemoryFragmentUi::captureAndInsert)

这工作正常。

现在我需要将一个参数传递给captureAndInsert,使其如下所示:

private fun captureAndInsert(myInt: Int) {
    println("captureAndInsert is called!")
}

如何调整ViewManager.controlButtonAnko视图中的调用以接受参数?

编辑

好的,所以我可以这样做:

fun ViewManager.controlButton(body: (myInt: Int) -> Unit) = frameLayout {
...
}

但是,从Anko的角度来看,我该如何称呼它呢?

要接受(Int) -> Unit函数,您只需将Int参数添加到controlButton参数中的函数类型中:

fun ViewManager.controlButton(body: (Int) -> Unit) = frameLayout {
    ...
}

body 的调用发生在 controlButton 内部,所以还需要将 lambda 的参数传递给 controlButton 的参数列表:

fun ViewManager.controlButton(body: (Int) -> Unit, v: Int) = frameLayout {
    body(v)
}
//call
controlButton(this@MemoryFragmentUi::captureAndInsert, 5)

最新更新