【发布时间】:2021-11-22 11:11:45
【问题描述】:
如何创建自己的类似于 forEach (kotlin-stdlib) 的 lambda 表达式?
场景:
对于列表的每个对象,我将其包装在另一个对象中并调用如下包装器方法:
class Action {
fun runA() {
objects.forEach { obj ->
val wrapper = Wrapper(obj)
wrapper.runA()
}
}
}
问题:
我想在不重复代码的情况下创建runB。
如何在 Kotlin 中优雅地做到这一点?
我无法传递像下面这样的参数方法,因为我要调用的方法属于我尚未创建的实例。
class Action {
fun runMethod(method: () -> Unit) {
objects.forEach { obj ->
val wrapper = Wrapper(obj)
method() // I want: wrapper.method(), but wrapper is created in the forEach lambda
}
}
fun runA() { ... }
fun runB() { ... }
}
理想情况下,我想要这样的东西:
class Action {
// ...
fun runA() {
runMethod { wrapper ->
wrapper->runA()
}
}
fun runB() {
runMethod { wrapper ->
wrapper->runB()
}
}
}
【问题讨论】: