将惰性参数传递给函数

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,因为列表将包含值。