用于保存资源的DSL

时间:2011-01-18 13:06:17

标签: scala dsl

任何人都可以帮我构建一个用于保存资源的DSL吗?我想使用它类似于Java的synchronized,所以如果已经获得了资源(java:一个对象监视器),它将不会再被获取! (对于以下示例,假定资源是Int)类型

object Holding {
  def main(args : Array[String]) : Unit = {

    HoldResource(1,2,3) {
      // holding resource 1,2,3
      println("!")
      HoldResource(3) {
        // still holding resource 1,2,3 (but not acquiring resource 3 again!!!)
        println("*")
      }
      println("!!")
      HoldResource(4,5) {
        // holding resource 1,2,3,4,5
        println("#")
      }
      println("!!!")
    }
    // all resources are freed
  }
}

到目前为止,我的ROUGH方法看起来像这样(这意味着我知道try { ... } finally { ... }资源模式。):

object HoldResource {
  class Context(val resources: Seq[Int]) {
    def apply[A](f: => A): A = {
      try { f } finally {
        // free resources
      }
    }
  }
  def apply[A](resources: Int*): Context = {
    // lock/acquire resources
    new Context(resources)
  }
}

非常感谢!

1 个答案:

答案 0 :(得分:2)

看起来你正处于软件事务内存之后。

试试这些文章让您入门:

还有一些关于资源管理的有用资料: