如何调整我的 Kotlin 高阶函数以获取参数?
How can I adapt my Kotlin Higher-Order function to take a parameter?
在 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.controlButton
和 Anko
视图中的调用以接受参数?
编辑:
好的,我可以这样做:
fun ViewManager.controlButton(body: (myInt: Int) -> Unit) = frameLayout {
...
}
但是如何从 Anko
视图调用它?
要接受一个(Int) -> Unit
函数,你只需要在controlButton
参数中的函数类型中添加Int
参数:
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)
在 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.controlButton
和 Anko
视图中的调用以接受参数?
编辑:
好的,我可以这样做:
fun ViewManager.controlButton(body: (myInt: Int) -> Unit) = frameLayout {
...
}
但是如何从 Anko
视图调用它?
要接受一个(Int) -> Unit
函数,你只需要在controlButton
参数中的函数类型中添加Int
参数:
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)