RXKotlin Lambda了解
这永远不会完成:RXKotlin Lambda了解,lambda,kotlin,rx-kotlin,Lambda,Kotlin,Rx Kotlin,这永远不会完成: Completable.complete() .andThen{ Completable.complete() } .test() .assertComplete() 这就完成了: Completable.complete() .andThen(Completable.complete()) .test() .assertComplete() 根据杰克·沃顿的说法: “您需要和(
Completable.complete()
.andThen{ Completable.complete() }
.test()
.assertComplete()
这就完成了:
Completable.complete()
.andThen(Completable.complete())
.test()
.assertComplete()
根据杰克·沃顿的说法:
“您需要和(Completable.complete())
。请注意括号和
不是花括号。后者创建的lambda不调用其发射器。”
参考:
有人能更详细地解释一下吗?我原以为我理解兰姆达的,但这真的让我很困惑 使用大括号,通过在lambda中描述匿名
CompletableSource
实例的单个方法,可以使用和定义该实例
这与执行以下操作相同:
Completable.complete()
.andThen(object: CompletableSource {
override fun subscribe(cs: CompletableObserver) {
Completable.complete()
}
})
.test()
.assertComplete()
正如您所看到的,在这个CompletableSource
中,您除了创建一个Completable
实例并丢弃它的结果之外,什么也不做。要使链继续,必须调用作为参数接收的completableobserver
上的方法(例如,可以调用onNext()
和onComplete()
)
虽然它的语法几乎相同,但以下是Java版本,以防它有助于您理解:
Completable.complete()
.andThen(new CompletableSource() {
@Override
public void subscribe(CompletableObserver cs) {
Completable.complete();
}
})
.test()
.assertComplete();
使用大括号,您可以通过描述lambda中的单个方法来使用和定义匿名
CompletableSource
实例
这与执行以下操作相同:
Completable.complete()
.andThen(object: CompletableSource {
override fun subscribe(cs: CompletableObserver) {
Completable.complete()
}
})
.test()
.assertComplete()
正如您所看到的,在这个CompletableSource
中,您除了创建一个Completable
实例并丢弃它的结果之外,什么也不做。要使链继续,必须调用作为参数接收的completableobserver
上的方法(例如,可以调用onNext()
和onComplete()
)
虽然它的语法几乎相同,但以下是Java版本,以防它有助于您理解:
Completable.complete()
.andThen(new CompletableSource() {
@Override
public void subscribe(CompletableObserver cs) {
Completable.complete();
}
})
.test()
.assertComplete();
Completable.complete()
,然后作为参数传递给,然后传递给
,然后
,这将成为的一个实现(感谢)。它永远不会被执行。下面显示了您的操作:
val compl = CompletableSource { Completable.complete() }
Completable.complete()
.andThen (compl)
.test()
.assertComplete()
.assertComplete()
Completable.complete()
,然后作为参数传递给,然后传递给
,然后
,这将成为的一个实现(感谢)。它永远不会被执行。下面显示了您的操作:
val compl = CompletableSource { Completable.complete() }
Completable.complete()
.andThen (compl)
.test()
.assertComplete()
.assertComplete()
很好很好的解释,我一定很累了,这完全有道理。不幸的是,每个使用Kotlin和Rx的人都必须花几个小时进行调试。其他Rx类和运营商也会发生这种情况。大脑融化:D同样的事情伤害了我的大脑试图学习Haskell很棒的解释,我一定很累了,这是完全有道理的。不幸的是,每个使用Kotlin和Rx的人都必须花几个小时进行调试。这种情况也发生在其他Rx类和运营商身上。大脑融化:D这和我试图学习Haskell时伤害大脑的事情是一样的