没有任何参数的订阅

时间:2016-08-29 18:35:35

标签: scala rx-scala

我需要编写一些RxScala代码,用于从Scala Swing中的文本字段创建Observable。 在查看Github之后,我编写了这段代码,这似乎有用:

def textValues: Observable[String] = Observable.create[String](observer => {
  observer.onNext(field.text)
  Subscription()
})

其中field.text给出该字段中文本的当前状态。

但我不明白这一行:

  Subscription()

Subscription对此有用吗?它没有采用任何参数,因此我假设它不能用于取消订阅我创建的可观察数据,因为它甚至不能引用这个可观察数据。

那么Subscription()有什么好处?

为什么不接受任何参数?

1 个答案:

答案 0 :(得分:1)

首先,回答关于这一行的问题:

Subscription()

它会创建一个空订阅,即在其上调用unsubscribe时不执行任何操作的订阅(而不是取消注册事件侦听器)。

其次,请注意您正在使用"老式"创建Observables的方法:

@deprecated("Use [[Observable.apply]] instead", "0.26.2")
def create[T](f: Observer[T] => Subscription): Observable[T]

新方法就是这个:

def apply[T](f: Subscriber[T] => Unit): Observable[T]

它对应于RxJava' s Observable.create。 如果您想使用此方法注册unsubscribe操作,则应使用Subscriber.add(Subscription)

第三,让我指出RxSwing,它定义了各种Swing Events的Observable,这样你就不必自己重新实现它们了。它是用Java编写的,但它很容易与Scala兼容,例如,您可以在this example中看到。