gpt4 book ai didi

groovy - 如何将参数传递给 Groovy 2.0 脚本?

转载 作者:行者123 更新时间:2023-12-03 03:00:56 26 4
gpt4 key购买 nike

我有 2 个脚本,我试图在其中测试传递参数,但失败了。我检查了 GroovyScriptEngine 的文档,但它似乎无法处理我想传递 arg 而不是属性值对(在绑定(bind)中)的情况。

这是我得到的错误:

C:\AeroFS\Work\Groovy_Scripts>groovy scriptengineexample.groovy
hello, world
Caught: groovy.lang.MissingPropertyException: No such property: args
for class: hello
groovy.lang.MissingPropertyException: No such property: args for
class: hello
at hello.run(hello.groovy:4)
at Test.main(scriptengineexample.groovy:14)

这是我的脚本:

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException ;
import groovy.util.ScriptException ;
import java.io.IOException ;

public class Test {
public static void main( String[] args ) throws IOException,
ResourceException, ScriptException {
GroovyScriptEngine gse = new GroovyScriptEngine( [ '.' ] as String[] )
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
System.out.println( "Output: " + binding.getVariable("output") );
}
}

还有这个:

//hello.groovy
println "hello.groovy"
for (arg in this.args ) {
println "Argument:" + arg;
}

最佳答案

Hello 正在寻找名为 args 的绑定(bind)中的字符串数组。当您通过命令行运行脚本时,系统会自动向您提供此信息,但如果您在该上下文之外运行它,则必须自行将其添加到 Binding 中:

这会将发送到 Test 的参数按原样传递给 Hello:

public class Test {
public static void main(String[] args) {
Binding b = new Binding()
b.setVariable("args", args)
Hello h = new Hello(b);
h.run()
}
}

如果你想发送特定的参数,你必须自己构造数组:

public class Test {
public static void main(String[] args) {
Binding b = new Binding()
b.setVariable("args", ["arg1", "arg2", "etc."])
Hello h = new Hello(b)
h.run()
}
}

关于groovy - 如何将参数传递给 Groovy 2.0 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16046993/

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