Может ли кто-нибудь помочь мне создать 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)
}
}
Большое спасибо!