我正在尝试将groovy嵌入到大型Java应用程序中.
Java应用程序应该在启动时加载一些实用程序Groovy脚本.
然后应用程序应该多次运行其他脚本.还需要在GUI处输入一些代码并在用户请求时执行它.
我面临的问题是:
我正在加载启动脚本,如下所示:
groovyshell gShell = new groovyshell();
gShell.evaluate(new FileReader("scripts/autoload.groovy"));
假设我的autoload.groovy包含:
def prnt(m) {
println("From Groovy: " + m);
}
这很好用.但是,当我想使用以下命令运行用户命令时:
gShell.evaluate("prnt 66");
我收到错误:
groovy.lang.MissingMethodException:没有方法签名:Script2.prnt()适用于参数类型:(java.lang.Integer)值:[66]
注意:我也试过“autoload.prnt 88”,仍然得到错误.
最佳答案
每个评估调用都被编译并作为单独的脚本运行,并且
def prnt(m) {
println("From Groovy: " + m);
}
定义从autoload.groovy生成的Script类中的方法,该方法无法从后续的“调用”脚本访问.但是,由同一groovyshell运行的脚本共享相同的绑定,因此您可以在一个脚本的绑定中存储值,并在另一个脚本中访问它们.在绑定中存储值只是将值分配给另外未声明的变量:
prnt = { m ->
println("From Groovy: " + m);
}
这将在绑定变量prnt中存储闭包,您可以从同一shell中的其他脚本调用闭包.注意
def prnt = { m ->
要么
Closure prnt = { m ->
不起作用,因为def或类型使它成为局部变量声明(对这个特定脚本是私有的),而不是对绑定的赋值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。