ScopeProperty

范围属性是可以在当前线程本地存储值的东西。它的 API 可用于设置/获取该值,还可以以堆栈方式对部分值进行修改。

换句话说,它是全局变量、scala 隐式变量、线程本地变量(ThreadLocal) 的替代品。

  • 与全局变量相比,它允许运行多个线程独立运行相同的代码

  • 与 scala 隐式变量相比,它与代码库的耦合较小

  • 与线程本地变量(ThreadLocal) 相比,它有一些 API 可以收集所有范围属性并稍后将它们恢复到相同状态

object Xlen extends ScopeProperty[Int]

object ScopePropertyMiaou extends App {
  Xlen.set(1)
  println(Xlen.get) //1
  Xlen(2) {
    println(Xlen.get) //2
    Xlen(3) {
      println(Xlen.get) //3
      Xlen.set(4)
      println(Xlen.get) //4
    }
    println(Xlen.get) //2
  }
}