如何调整我的Kotlin高阶函数来获取参数?

时间:2018-03-01 17:03:34

标签: kotlin anko

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视图中调用它?

1 个答案:

答案 0 :(得分:2)

要接受(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)