Я пытаюсь узнать, как создать глобальное замыкание в groovy (например, замыкание println). У меня есть следующий код:
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)
}