我知道,在previously discussed on Stack Overflow的上下文中,热和冷观测值之间的区别是C#,但是我根本不知道C#,也不理解Lee提到的代码示例。
我在Scala工作,使用RXScala库。在Scala中,什么是冷热可观察的,它们是如何使用RXScala实现的?
发布于 2015-01-19 12:17:14
冷观测值
冷观测值是在订阅时开始产生值的可观测值。
被动的流,并根据请求开始发布。
下面是一些例子:
import rx.lang.scala._
import org.joda.time._
val onetwothree = Observable.just(1, 2, 3) // when subscribed each subscriber will get 1, 2, and 3
// scala> onetwothree.subscribe(println(_))
// 1
// 2
// 3
// res1: rx.lang.scala.Subscription = rx.lang.scala.Subscription$$anon$2@11be372a
// When subscribed will get one event with current DateTime
val currentTime = Observable.defer {
Observable.just(DateTime.now)
}
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:37.333+02:00
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:38.742+02:00
// scala> currentTime.subscribe(println(_))
// 2015-01-19T14:13:40.448+02:00
// And this one is tricky.
val loggedInUsers = Obserable.defer {
fetchLoggedUsersFromDb
}热观测值
无论订阅是活动的和发布的流。
自然的例子来自UI编程:鼠标点击的流。无论是否订阅流,都会产生单击。
在许多应用程序中,loggedInUsers被制作成可以称为“温暖可观察”的东西:
val loggedInUsers = updateTriggers.concatMap { _ =>
fetchLoggedUsersFromDb
}.replay(1)当上次触发updateTriggers时,该流的子程序将立即获得一个值,即日志用户。还有连续的更新。
暖观测值
val hot = mouseClicks
// Observable that will replay all of its items and notifications to any future Observer
// i.e. all mouseClicks from the time point we called `.replay`
val cold = hot.replay但在这两者之间有一些东西:
// Observable that will replay at most 10 items emitted by `hot`
val warm = hot.replay(10) 当我们订阅warm时,它会立即发出最后10次点击,然后继续发出点击。
https://stackoverflow.com/questions/28021313
复制相似问题