gpt4 book ai didi

Groovy DSL - 创建对象的快捷方式

转载 作者:行者123 更新时间:2023-12-02 08:21:54 25 4
gpt4 key购买 nike

Groovy 中有没有办法替换如下代码:

Task a = new Task('a')
Process p = new Process('p')

用一些更简单的东西,比如:

task a
process p

其中taskprocess可以是创建对象并返回它或将其添加到脚本Map的方法调用。

我目前遇到的主要问题是我无法使用a,因为它没有定义。

最佳答案

要创建对象并命名它们而不分配给变量,您可以使用绑定(bind)。创建并保留对闭包绑定(bind)的引用,并让实用方法 taskprocess 将新实例与名称相关联。例如:

def scriptBinding = new Binding()

def task = { String name ->
scriptBinding[name] = new Task(name)
}
def process = { String name ->
scriptBinding[name] = new Process(name)
}

def script = {
task 'a'
process 'b'

println a
println b
}
script.binding = scriptBinding
script()

请注意,您必须引用 ab,以便它们被解释为字符串而不是 undefined variable 。如果您想省略引号,可以使用自定义 Binding 对象来计算 undefined symbol 作为其字符串表示形式,如下所示:

class SymbolAsStringBinding extends Binding {
Object getVariable(String name) {
try {
super.getVariable(name)
} catch (MissingPropertyException e) {
name
}
}

boolean hasVariable(String name) {
true
}
}

添加该内容后,您可以将脚本编写为:

def script = {
task a
process b

println a
println b
}

关于Groovy DSL - 创建对象的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com