我希望控制订阅的范围,即使存在异常,同时避免对我的订阅使用 var
在Rx / F#中我会这样做
use subscription = Observable.subscribe ...
并且在离开范围时会自动处理订阅。
Scala的最佳做法是什么?
答案 0 :(得分: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