gpt4 book ai didi

lambda - RXKotlin Lambda 理解

转载 作者:行者123 更新时间:2023-12-02 13:09:27 24 4
gpt4 key购买 nike

这永远不会完成:

Completable.complete()
.andThen{ Completable.complete() }
.test()
.assertComplete()

这确实完成了:
Completable.complete()
.andThen(Completable.complete())
.test()
.assertComplete()

根据 jack 沃顿的说法:

"你想要 andThen(Completable.complete()) 。注意括号和
不是花括号。后者创建了一个不调用其发射器的 lambda。”

引用: https://github.com/ReactiveX/RxJava/issues/5551

谁能更详细地解释这一点?我以为我理解 lambda,但这真的让我很震惊。

最佳答案

使用花括号,您正在使用 SAM conversion并定义一个匿名 CompletableSource通过在 lambda 中描述其单个方法来实例化。

这与执行以下操作相同:

Completable.complete()
.andThen(object: CompletableSource {
override fun subscribe(cs: CompletableObserver) {
Completable.complete()
}
})
.test()
.assertComplete()

如你所见,在这个 CompletableSource你除了创建一个 Completable 什么都不做实例并丢弃其结果。要使链继续,您必须调用 CompleteableObserver 上的方法。您作为参数收到的信息(例如,您可以调用 onNext()onComplete())。

虽然语法几乎相同,但这里是 Java 版本,以防它帮助您理解事物:
Completable.complete()
.andThen(new CompletableSource() {
@Override
public void subscribe(CompletableObserver cs) {
Completable.complete();
}
})
.test()
.assertComplete();

关于lambda - RXKotlin Lambda 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48528325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com