Groovy是一个可以解释执行的语言,在解释执行的情况下具有以下基础语法特征。
groovy xxx.groovy方式运行一个groovy文件.
在解释执行的Groovy文件中,有如下特点:
- 文件运行在一个
Script对象中。 def关键字可以省略
举个例子:
//省略def不写
name = "XiaoMing123"
//闭包不写def
myClosure = {
age = 3
println(age)
}
println(name)
myClosure.call()
//运行在Script类中
println(this instanceof Script) //返回true
输出:
XiaoMing123
3
true
evaluate函数
evaluate函数可以调用另一个脚本文件,并把Script的binding对象传过去。
函数声明:
evaluate(File file)
file为脚本位置
举个例子:
我们有两个脚本文件ScriptOne,ScriptTwo
//ScriptOne.groovy
println("我是第一个ScriptOne")
result=evaluate(new File("/Users/fmy/IdeaProjects/groovy2/src/main/groovy/ScriptTwo.groovy"))
println(result)
//ScriptTwo.groovy
println("我是第二个ScriptTwo")
"第二个脚本的返回结果 ლ(′◉❥◉`ლ)"
输出:
我是第一个ScriptOne
我是第二个ScriptTwo
第二个脚本的返回结果 ლ(′◉❥◉`ლ)
Script中有一个属性binding,而binding内部有一个variables存储当前环境的变量,如当前声明的变量或者启动脚本传入的参数。当执行一个脚本时如果存在variables保存的变量那么可以直接使用。evaluate调用时会把当前脚本的binding传入下一个脚本中。
接下来看一个复杂的例子:
三个文件:
- Main.groovy
- MyScript.groovy
- MyScript2.groovy
//Main.groovy
//省略def不写
name = "XiaoMing123"
//闭包不写def
myClosure = {
age = 3
println(age)
}
//调用MyScript 并自动把自身的binding传入下一个.
evaluate(new File("/Users/fmy/IdeaProjects/groovy2/src/main/groovy/MyScript.groovy"))
//MyScript.groovy
//println(binding.variables.name)
age = 3
//输出Main.groovy中声明的name变量
println("MyScript:name=" + name)
println("MyScript:args[0]=" +args[0])
//调用MyScript2,把自身的binding和上级父亲Main的bingding一起传入给下一级
evaluate(new File("/Users/fmy/IdeaProjects/groovy2/src/main/groovy/MyScript2.groovy"))
MyScript2.groovy
//MyScript2.groovy
println("MyScript2:name=" + name)
println("MyScript2:age=" + age)
调用groovy Main.groovy aa 传入了一个aa参数
输出:
MyScript:name=XiaoMing123
MyScript:args[0]=aa
MyScript2:name=XiaoMing123
MyScript2:age=3
编译时环境运行脚本
如果你想在编译版本groovy运行脚本请用如下方式:
class Main {
public static void main(String[] args) {
def binding = new Binding()
binding.setVariable("args", ["hello"])
binding.setProperty('name',"XiaoMing")
def shell = new GroovyShell(binding)
shell.evaluate(new File("/Users/fmy/IdeaProjects/groovy2/src/main/groovy/MyScript.groovy"))
}
}
最后
以上就是善良海燕最近收集整理的关于Groovy脚本执行的全部内容,更多相关Groovy脚本执行内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复