2015-02-04 3 views
0

Так что я довольно новичок и в Scala, и в RX. Парень, который знал больше всего, и кто на самом деле написал этот код, только что ушел, и я не уверен, что происходит. Эта конструкция во всем его код, и я не совсем ясно, что его дела:Что делает этот код ScalaRX?

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

я в основном получить do some stuff, и звонки на абонента. То, чего я не понимаю, где subscriber? Делает ли subscriber => { экземпляр подписчика? Что делает Observable { subscriber => { ... } } do/mean?

ответ

1

Если вы посмотрите на документацию Observable companion object, вы увидите метод apply, который принимает функцию типа (Subscriber[T]) ⇒ Unit. Так что, когда вы звоните Observable{withSomeLambda}, то это то же самое, как вызов Observable.apply{withSomeLambda}

И, если вы пройти весь путь к source code вы увидите, что это на самом деле возвращение

toScalaObservable(rx.Observable.create(f)) 

где f является лямбда что вы прошли мимо.

Итак, subscriber - это только параметр лямбда. Он передается вызывающей функцией.

+0

Я продолжаю забывать о неявном .apply(). Спасибо, что напомнили. –

1

Этот код создает новый Observable, как описано here.

В основном, когда нижестоящий компонент подписывается на этот поток, этот обратный вызов вызывается. В обратном вызове мы определяем, когда мы, как источник данных, будем звонить onNext(v: T), а именно, как мы передаем каждый элемент, который мы им генерируем, и когда мы назовем onCompleted(), как мы сообщим подписчику о том, что мы закончили отправку данных.

После того, как вы создали Observable вы можете начать называть Observable operators, которая либо приведет к другому, соединение Observable, или приведет к условие завершения, который закончится процесс, и обычно приводит к получению конечного результата для потока (часто представляют собой совокупность или совокупную стоимость).

Вы не используете List в своем вопросе, но обычно, если вы хотите сделать реактивный поток из списка, вы бы назвали Observable.from().

PS: Я думаю, что это код RxJava.

+0

Очень полезно, спасибо. Я принял другой ответ только потому, что он попал в синтаксис .apply(), который я искал. Спасибо за помощь. –

+0

Np, рад, что вы добиваетесь прогресса. –