Scala适用于需要高性能的多线程环境,Groovy适用于DSL、测试、快速开发等
在脚本中解析脚本
evaluate(Expression)
Eval.me(Expression)
Eval.x(param1,Expression)
Eval.xy(param1,param2,Expression)
Eval.xyz(param1,param3,Expression)
有一个问题就是用Eval解析的表达式作用域的问题,如果要使用当前域下的函数,需要结合闭包和委托指向来实现
def c=evaluate("{->${Expression}}")c.delegate=thisc()
一个具体的Demo:
def power(x){x*x}println power(2)//evaluate("println power(2)") // 这样写会出错的def Expression = "println power(2)"def closure1 = evaluate("return {->${Expression}}")closure1.delegate=thisclosure1()def test(String ex){ def closure = evaluate("return {->${ex}}") closure.delegate = this closure()}test(Expression)
java执行groovy脚本为了防止前面的表达式污染,可以在下一条表达式执行前对bindings进行清理
ScriptEngine engine = new ScriptEngineManager().getEngineByname("groovy");final Bindings bds=engine.getBindings(ScriptContext.ENGINE_ScopE);bds.clear(); //在执行前将bings进行清理,可以防止前面的表达式污染engine.eval(scripts);
实用代码
('a'..'z') // [a,b,..z]0.upto(10){print it}10.times{print it}0.step(11,2){print it}s=""" 我是带格式的文本 两行 """总结
以上是内存溢出为你收集整理的Groovy学习笔记全部内容,希望文章能够帮你解决Groovy学习笔记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)