加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy学习笔记

发布时间:2020-12-14 16:38:10 所属栏目:大数据 来源:网络整理
导读:Scala适用于需要高性能的多线程环境,Groovy适用于DSL、测试、快速开发等 在脚本中解析脚本 evaluate(expression) Eval.me(expression) Eval.x(param1,expression) Eval.xy(param1,param2,expression) Eval.xyz(param1,param3,expression) 有一个问题就是用E

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=this
c()

一个具体的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=this
closure1()
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=""" 我是带格式的文本 两行 """

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读