在 RxScala 中管理订阅的最佳实践是什么?

What is the best practice for managing subscriptions in RxScala?

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

在Rx/F#我会这样做

use subscription = Observable.subscribe ...

并且订阅在离开范围时自动销毁。

Scala 中的最佳实践是什么?

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

我添加了从订阅到资源的隐式转换,并使用了 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