【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 )
文章目錄
- 一、綁定作用域 binding 變量分析
- 二、Binding 類 variables 成員分析
- 三、完整代碼示例
- 1、調用者 Groovy 腳本
- 2、被調用者 Groovy 腳本
- 3、執行結果
一、綁定作用域 binding 變量分析
分析 groovy.lang.Script 類的 evaluate 方法源碼 , 在該方法中 , 創建了一個 GroovyShell 對象 ;
在創建時 , 將本腳本的 Binding binding 成員傳遞給了該 GroovyShell 對象 ;
Binding binding 成員中 , 保存了所有的 綁定作用域 變量 ;
GroovyShell 執行 File file 腳本 時 , 就可以拿到傳入的 Binding binding 成員中的所有 綁定作用域變量 , 包括我們定義的
// 要傳入的參數 args = [] args[0] = "arg0" args[1] = "arg1"args 參數變量 , 這樣就在被執行的 Groovy 腳本中 , 獲取到了相應的執行參數 ;
groovy.lang.Script # evaluate 方法源碼 :
public abstract class Script extends GroovyObjectSupport {/*** 一個助手方法,允許使用此腳本綁定作為變量范圍動態計算groovy表達式** @param file 要執行的 Groovy 腳本文件 */public Object evaluate(File file) throws CompilationFailedException, IOException {GroovyShell shell = new GroovyShell(getClass().getClassLoader(), binding);return shell.evaluate(file);} }二、Binding 類 variables 成員分析
Binding 類原型如下 , 所有的 綁定作用域 變量 , 都封裝在 private Map variables 成員中 ;
/*** 表示腳本的變量綁定,可以從腳本對象外部進行更改,也可以在腳本外部創建并傳遞到腳本中。* <p> 綁定實例不應在多線程上下文中使用。*/ public class Binding extends GroovyObjectSupport {private Map variables; }在被調用的 Groovy 腳本中 , 打印 Binding binding 中的 Map variables 成員 ;
// 打印參數 println argsdef age = "18" age2 = "16"// 打印綁定作用域變量 println binding.variables打印結果如下 :
[arg0, arg1] [args:[arg0, arg1], age2:16]age2 變量 和 args 變量 , 被放在了 綁定作用域中 , 使用 def 定義的變量 , 是本地作用域變量 , 沒有被放在 Binding binding 成員中 ;
Map variables 對應的內容如下 :
[args:[arg0, arg1], age2:16]- args 變量對應的值是 [arg0, arg1] , 這是傳入的腳本執行參數 ;
- age2 變量對應的值是 16 , 這是使用 age2 = "16" 代碼 , 在本腳本中定義的 綁定作用域變量 ;
三、完整代碼示例
1、調用者 Groovy 腳本
// 要傳入的參數 args = [] args[0] = "arg0" args[1] = "arg1"// 調用 Script.groovy 腳本 evaluate(new File("Script.groovy"))
2、被調用者 Groovy 腳本
/*下面的 age 和 age2 都是變量定義age 變量的作用域是 本地作用域age2 變量的作用域是 綁定作用域一個是私有變量 , 一個是共有變量*/// 打印參數 println argsdef age = "18" age2 = "16"// 打印綁定作用域變量 println binding.variablesprintln "$age , $age2"/*定義一個函數在下面的函數中 , 可以使用 綁定作用域變量不能使用 本地作用域變量*/ void printAge() {println "$age2"//println "$age" }printAge()
3、執行結果
上面的兩個 Groovy 腳本都在相同目錄 ;
[arg0, arg1] [args:[arg0, arg1], age2:16] 18 , 16 16總結
以上是生活随笔為你收集整理的【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovy 脚本调用
- 下一篇: 【Groovy】Groovy 脚本调用