所以我对Scala和RX都很陌生。知道最多的人,以及实际编写这段代码的人,刚离开,我不知道发生了什么。这个构造遍及他的代码,我不清楚它的作用:
def foo(List[Long]) : Observable[Unit] =
Observable {
subscriber => {
do some stuff
subscriber.onNext()
subscriber.onCompleted()
}
我主要得到do some stuff
,以及对订阅者的调用。我不知道的是,subscriber
来自哪里? subscriber => {
是否实例化订阅者? Observable { subscriber => { ... } }
做什么/意味着什么?
答案 0 :(得分:1)
如果您查看Observable companion object文档,您会看到apply
方法,它采用(Subscriber[T]) ⇒ Unit
类型的函数。因此,当您致电Observable{withSomeLambda}
时,这与调用Observable.apply{withSomeLambda}
而且,如果你一直走到source code,你会看到这真的回归了
toScalaObservable(rx.Observable.create(f))
其中f
是您传入的lambda。
因此,subscriber
只是lambda的参数。它由该函数的调用者传入。
答案 1 :(得分:1)
此代码正在创建here所述的新Observable
。
基本上,当下游组件订阅此流时,将调用此回调。在回调中,我们确定我们作为数据源何时调用onNext(v: T)
,这是我们如何传递我们生成的每个元素,以及何时我们将调用onCompleted()
,这就是我们告诉订阅者的方式我们已经完成了发送数据。
创建Observable
后,您可以开始调用Observable operators,这将导致另一个化合物Observable
,或者会导致终止条件,这将终止该过程,并且通常会导致流程的最终结果(通常是集合或汇总值)。
您在问题中没有使用List
,但通常情况下,如果您想从列表中制作一个反应流,请拨打Observable.from()
。
PS:我认为这是RxJava代码。