我想了解如何在groovy中創建全局閉包(如println閉包)。我有以下代碼:創建全局Groovy Closure
a.groovy
def header = Tools.&header
header 'groovy script a'
b.groovy
def header = Tools.&header
header 'groovy script b'
tools.groovy
class Tools {
def static header(String str) {
println("\n${str}")
println("-" * 80)
}
}
我想避免:
def header = Tools.&header
在每一個Groovy腳本,我想用Tools.header(
)(,只使用頭閉合,當我導入工具包)。我試圖把這個定義放在Tools類後面,但那不起作用。這可以做到嗎?有沒有更好的方法來處理這個問題?
編輯:(使用元類和方法評估,除非有以包括外部腳本更簡單的方式):
a.groovy
evaluate(new File("Tools.groovy"))
header 'groovy script a'
b .groovy
evaluate(new File("Tools.groovy"))
header 'groovy script b'
tools.groovy
Object.metaClass.header = {str ->
println("\n${str}")
println("-" * 80)
}
謝謝,這有幫助。我確實需要在腳本中添加如下內容:'evaluate(new File(「../ tools/Tools.groovy」))'將object.metaClass定義從一個外部腳本文件包含到其他腳本中。這是一種僞「包含」(可能不是正確的術語,但它在概念上看起來像我) – jmq 2011-04-06 16:39:39