java - 如何为交互式 session 创建有状态的 Groovy 绑定(bind)

标签 java groovy

我正在构建一个基于 groovy 的工具,作为一个插件,我想提供一个交互式命令行,我已经部分工作了,但是绑定(bind)没有保持 GroovyShell.evaluate() 调用之间的状态,我已经浏览了 groovy 文档,他们有一个使用名为 InteractiveGroovyShell 的类的示例,该类在版本 2.0.x 上不可用。

有没有办法配置普通的groovy shell来实现这个功能?

这是我现在创建 groovy shell 的简化版本:

CompilerConfiguration config = new CompilerConfiguration();
Binding binding = new Binding();
shell = new GroovyShell(binding, config);
shell.evaluate("def a = 20");
shell.evaluate("println a"); //this throws an exception telling the variable does not exist

最佳答案

shell.evaluate("def a = 20");

您只需要a = 20,而不是def a = 20。每个evaluate调用都会解析并编译一个单独的脚本,并且声明(无论是使用def还是使用int a = 20等显式类型)都会成为该特定脚本中的局部变量,并且不会在绑定(bind)中存储任何内容。如果没有 def,您就可以对一个未声明的变量进行简单的赋值,该变量将进入绑定(bind),因此对以后的 evaluate 调用可见。

关于java - 如何为交互式 session 创建有状态的 Groovy 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217976/

相关文章:

java - 哪个是调用所需 servlet 的最佳方法

java - 大值会导致准确性损失

java - java.util.function.Consumer 的 C++ 等价物是什么?

java - Android:通过 RTP (G.711 PCMU) 将 .wav 发送到 SIP 电话,基于 SipDroid/MjSIP,声音非常嘈杂、噼啪作响

grails用闭包的可选参数替换方法

grails - 对表达的错误评估

grails - 在Grails中获取当前的浏览器网址

java - 字符输出错误

collections - 常规列表 : Group By element's count and find highest frequency elements

java - 在 Java 中处理 XML 的更好方法