我想控制我的订阅范围,甚至在存在异常的情况下,同时避免对我的订阅使用var
在 Rx/F# 我会这样做
use subscription = Observable.subscribe ...
并且订阅在离开范围时会自动释放。
Scala 的最佳实践是什么?
我的解决方案是使用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