Scala 理解monix中的观察者

Scala 理解monix中的观察者,scala,functional-programming,monix,Scala,Functional Programming,Monix,我正在阅读《观察家》广告,我遇到了以下例子: 或者,您可以快速构建一个观察者,只记录观察到的事件 收到。我们将在其他示例中使用此选项: import monix.reactive.Observer val out = Observer.dump("O") // out: Observer.Sync[Any] out.onNext(1) //=> 0: O-->1 // res0: Ack = Continue out.onNext(2) //=> 1:

我正在阅读《观察家》广告,我遇到了以下例子:

或者,您可以快速构建一个观察者,只记录观察到的事件 收到。我们将在其他示例中使用此选项:

import monix.reactive.Observer

val out = Observer.dump("O")
// out: Observer.Sync[Any]

out.onNext(1)
//=> 0: O-->1
// res0: Ack = Continue

out.onNext(2)
//=> 1: O-->2
// res0: Ack = Continue

out.onComplete()
//=> 2: O completed
但下一个非法例子是:

输入两个元素,然后停止。这是不合法的:

// BAD SAMPLE
observer.onNext(1)
observer.onNext(2)
observer.onComplete()

因此,我们可以看到相同的
onNext->onNext->onComplete
链。这不合法吗?为什么?

在您链接的文档中,如果我理解正确,将直接在示例之后解释。错误示例的问题是,我们在
onNext(1)
之后没有背压,而是立即调用
onNext(2)
,因此,任何时候我们都需要向观察者提供
map
。似乎不是堆栈安全的…是否是堆栈安全取决于Monix的
.map
实现。许多类似的库使用某种蹦床或惰性实现来防止堆栈问题。不管怎样,我肯定Monix是安全的。但是,是的,你的描述也是我对它的理解