2013-04-23 16 views
0

訪問Groovy中另一個腳本中定義的閉包的正確和最簡單的方法是什麼?這可能不是最好的設計,但我有在其他腳本中定義的呼叫閉包

SomeScript.groovy定義的封閉

bindingC = { 
    ... 
} 

def localC = { 
    ... 
} 

OtherScript.groovy

SomeScript s = new SomeScript() 
s.bindingC(...); 
s.localC(...); 

注:SomeScript.groovy是程序邏輯和OtherScript。 groovy是單元測試邏輯。它們都在同一個包中,我可以在SomeScript中訪問方法。

回答

3

有兩種方式(我知道),你可以用它來實現你想要的;您可以實例化SomeScript並運行其內容,或者您​​可以使用groovy shell評估SomeScript。腳本需要執行這樣的變量將在被創建的結合:

SomeScript.groovy:

bindingC = { 
    110.0 
} 

OtherScript.groovy溶液1:

s = new GroovyShell().evaluate new File("SomeScript.groovy") 
assert s.bindingC() == 110.0 

OtherScript.groovy溶液2:

s2 = new SomeScript() // SomeScript is also an instance of groovy.lang.Script 
s2.run() 
assert s2.bindingC() == 110.0 
+0

本地關閉無法訪問權限?因爲它就像一個方法的局部變量。 – xst 2013-04-23 19:17:11

+0

這是正確的.. – Will 2013-04-25 13:11:49

+0

@xst,也有groovy轉換'@ Field',它可以改變腳本變量的範圍:http://groovy.codehaus.org/gapi/groovy/transform/Field.html – Will 2013-05-04 11:34:47