这个ScalaRX代码在做什么?

时间:2015-02-04 04:46:54

标签: scala rx-scala

所以我对Scala和RX都很陌生。知道最多的人,以及实际编写这段代码的人,刚离开,我不知道发生了什么。这个构造遍及他的代码,我不清楚它的作用:

def foo(List[Long]) : Observable[Unit] =
  Observable {
    subscriber => {
      do some stuff
      subscriber.onNext()
      subscriber.onCompleted()
    }

我主要得到do some stuff,以及对订阅者的调用。我不知道的是,subscriber来自哪里? subscriber => {是否实例化订阅者? Observable { subscriber => { ... } }做什么/意味着什么?

2 个答案:

答案 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代码。