将惰性参数传递给函数
Pass a lazy parameter to function
我有一个函数需要调用另一个函数来完成工作。我想延迟第二个函数调用直到需要。原因是有时候不需要第二次函数调用。
代码如下所示:
suspend fun doWork(list: List<A>) {
if(list.isEmpty()) return
secondFunction()
}
然而,secondFunction()
必须由函数的调用者决定。有没有办法通过使用 lambda 来做到这一点?
您可以尝试使用 lambda 来延迟第二个函数的执行,直到您需要该值。
suspend fun doWork(
list: List<A>,
lambdaFunction: suspend () -> Unit
) {
...
lambdaFunction()
}
或者你可以让它 return 一个值。
suspend fun doWork(
list: List<A>,
lambdaFunction: suspend () -> String
) {
...
val result = lambdaFunction()
}
你可以这样称呼它:
doWork(
list = list,
lambdaFunction = { secondFunction() }
)
我也做到了 suspend
因为我看到你在使用 suspend
。您不必使用 suspend
.
你想要的可以通过Observer Pattern
解决
我会在 rxKotlin
告诉你
val subject = PublishSubject.create<Observable<List<A>>>()
subject.subscribeBy(
onNext = { doWork(it) },
onError = { it.printStackTrace() },
onComplete = { println("Done!") }
)
当列表准备好时。
subject.oNext(list)
将调用 doWork 函数,您无需阻止使用 secondFunction
,因为列表将包含值。
我有一个函数需要调用另一个函数来完成工作。我想延迟第二个函数调用直到需要。原因是有时候不需要第二次函数调用。
代码如下所示:
suspend fun doWork(list: List<A>) {
if(list.isEmpty()) return
secondFunction()
}
然而,secondFunction()
必须由函数的调用者决定。有没有办法通过使用 lambda 来做到这一点?
您可以尝试使用 lambda 来延迟第二个函数的执行,直到您需要该值。
suspend fun doWork(
list: List<A>,
lambdaFunction: suspend () -> Unit
) {
...
lambdaFunction()
}
或者你可以让它 return 一个值。
suspend fun doWork(
list: List<A>,
lambdaFunction: suspend () -> String
) {
...
val result = lambdaFunction()
}
你可以这样称呼它:
doWork(
list = list,
lambdaFunction = { secondFunction() }
)
我也做到了 suspend
因为我看到你在使用 suspend
。您不必使用 suspend
.
你想要的可以通过Observer Pattern
我会在 rxKotlin
val subject = PublishSubject.create<Observable<List<A>>>()
subject.subscribeBy(
onNext = { doWork(it) },
onError = { it.printStackTrace() },
onComplete = { println("Done!") }
)
当列表准备好时。
subject.oNext(list)
将调用 doWork 函数,您无需阻止使用 secondFunction
,因为列表将包含值。