任何人都可以帮我构建一个用于保存资源的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)
}
}
非常感谢!
答案 0 :(得分:2)
看起来你正处于软件事务内存之后。
试试这些文章让您入门:
还有一些关于资源管理的有用资料: