使用GroovyShell作为“表达式求值器/引擎”(或:如何重用GroovyS
发布时间:2020-12-14 16:33:21 所属栏目:大数据 来源:网络整理
导读:我在我的程序中使用Groovy Shell作为“表达式评估器/引擎”.它接受两个输入:(a)一个或多个init脚本(b)用户定义的脚本.然后两者在运行时连接成大块脚本(文本)并提供给shell. String initScripts = getFromDB()String userScript = getFromUser()def shell =
我在我的程序中使用Groovy
Shell作为“表达式评估器/引擎”.它接受两个输入:(a)一个或多个init脚本(b)用户定义的脚本.然后两者在运行时连接成大块脚本(文本)并提供给shell.
String initScripts = getFromDB() String userScript = getFromUser() def shell = new GroovyShell() output = shell.evaluate(initScripts + userScript) 上面的代码将在循环中运行,其中userScript的内容会有所不同. 到目前为止,initScripts只包含可能在userScript中引用的变量定义(例如def $yyyy = new Date().format(‘yyyy’))(例如print“$yyyy 001”). 有没有更有效的方法呢? (例如,重复使用shell,怎么样?)因为现在它非常慢. 编辑:Groovy是必须的.请不要推荐其他脚本引擎. 编辑:我在想GroovyShell是否可以这样做(伪代码): def shell = new GroovyShell() shell.evaluate(initScripts) for each userScript in DB { shell.put(userScript ) def result = shell.evaluateThat() println "Result is $result" } 这可能吗? (上次我用谷歌搜索它是不可能的,但我希望我错了) 解决方法
您可以缓存GroovyShell,您不需要总是创建一个新的:
final static GroovyShell shell = new GroovyShell() 此外,如果您多次运行一个脚本,您也可以缓存它们.您可以使用GroovyShell.parse(String scriptText)创建脚本,使用Script.run()运行脚本. 文档的This section也可能有用,而不是脚本,您也可以动态创建groovy对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |