1

我想控制我的订阅范围,甚至在存在异常的情况下,同时避免对我的订阅使用var

在 Rx/F# 我会这样做

use subscription = Observable.subscribe ...

并且订阅在离开范围时会自动释放。

Scala 的最佳实践是什么?

4

1 回答 1

0

我的解决方案是使用scala-arm,但我不确定是否有更好的方法。

我添加了从 Subscription 到 Resource 的隐式转换,并使用了 scala-arm 的托管资源机制,如下所示:

object ResourceImplicits {
  implicit val subscription2Resource = new Resource[Subscription] {
    override def close(s: Subscription): Unit = s.unsubscribe()  }
}

//...

for (s <- managed(obs.subscribe { n => println(s"n=$n")})) {
    // the subscription is alive in this scope
    // ...
}
//the subscription has been unsubscribed
于 2017-05-31T13:33:24.360 回答