我如何说服GroovyShell维护eval()调用的状态?
我正在尝试使用Groovy为我的应用程序创建交互式脚本/宏模式.该应用程序是OSGi,脚本可能需要的很多信息都不是预先知道的.我认为我可以使用GroovyShell并在加载OSGi捆绑包时多次调用eval()连续追加到名称空间. GroovyShell通过多个eval调用维护变量状态,但不维护类定义或方法. 目标:在启动期间创建基类.在OSGi捆绑软件加载时,根据需要创建派生类. 最佳答案
我不确定在eval之间不存在声明的类的含义,以下两个脚本在逐个回避时可以按预期工作:
…
但是,方法绑定到声明它们的类,并且GroovyShell为每个实例创建一个新类.如果您不需要任何脚本的返回值并且它们是真正的脚本(不是具有主方法的类),则可以将以下内容附加到每个评估的脚本的末尾.
如果您依赖于返回值,则可以在评估过程中手动管理评估并运行脚本(警告,未经测试的代码紧随其后,仅用于说明性用途)…
最后一个警告,我确定您知道.静态类型的变量不保存在评估之间,因为它们没有存储在绑定中.因此,在先前的脚本中,变量“ klass”将不会在脚本调用之间保留,而是消失.要纠正这一点,只需在首次使用所有变量时删除类型声明,这意味着它们将被读取并写入绑定中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |