我是一个可以运行脚本以自动化特定任务的应用程序。我想在这些脚本中使用元编程来优化代码大小和可读性。因此,不是这样写:
try {
def res = factory.allocate();
... do something with res ...
} finally {
res.close()
}
I'd like to
Factory.metaClass.withResource = { c ->
try {
def res = factory.allocate();
c(res)
} finally {
res.close()
}
}
因此,脚本编写人员可以编写:
factory.withResource { res ->
... do something with res ...
}
(我还可以做适当的错误处理等)。
现在我想知道什么时候以及如何实现这个功能。我可以将元类的操作附加到每个脚本前面的标头中,但我担心如果两个用户同时运行脚本(并发访问元类),会发生什么。
元类的范围是什么?编译器?脚本环境?Java VM?加载Groovy的类加载器?
我的想法是,如果Groovy元类具有VM范围,则可以在启动期间运行一次设置脚本。
try: ... finally:
?这是Python吗? - Will