DSL для хранения ресурсов - PullRequest
0 голосов
/ 18 января 2011

Может ли кто-нибудь помочь мне создать 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 Ответ

2 голосов
/ 18 января 2011

Похоже, что вы после программной транзакционной памяти.

Попробуйте эти статьи, чтобы начать:

Есть также несколько полезных материалов по управлению ресурсами:

...