2011-06-10 898 views

回答

2

只需在類或腳本範圍聲明變量,然後從您的方法或閉包中訪問它。沒有一個例子,儘管你的特定問題很難被更具體化。

但是,全局變量通常被認爲是不好的形式。

爲什麼不從一個函數返回變量,然後傳遞給下一個?

+0

如果我想使用其值已分配的變量在關閉內?例如:我在腳本的開頭有def a = null。現在在一個閉包裏面,賦值a ='some string'的值。我希望這個新值能夠被所有其他閉包訪問。謝謝 – OK999 2017-10-26 18:30:53

+0

真的嗎?當你必須嘗試修復它時,你會恨自己 – 2017-10-27 06:20:12

+0

我最終創建了一個閉包,它返回所需的計算值,並在需要的地方使用 – OK999 2017-10-27 13:24:14

1

與所有的OO語言一樣,Groovy本身沒有「全局」的概念(不像BASIC,Python或Perl)。

如果您有需要共享同一個變量的幾種方法,使用字段:

30
class Globals { 
    static String ouch = "I'm global.." 
} 

println Globals.ouch 
0

無法弄清楚你想要什麼,但你需要這樣的事? :

​def a = { b -> b = 1 } 
​bValue = a() 
println b // prints 1 

現在bValue包含b的值,它是在封閉a的變量。現在你可以做任何事情bValue讓我知道如果我誤解了你的問題

131

在Groovy腳本中,範圍可能與預期不同。這是因爲Groovy腳本本身就是一個帶有運行代碼的方法的類,但是這些都是運行時完成的。我們可以通過省略類型定義來定義一個變量作爲範圍,或者在Groovy 1.8中添加@Field註釋。

import groovy.transform.Field 

var1 = 'var1' 
@Field String var2 = 'var2' 
def var3 = 'var3' 

void printVars() { 
    println var1 
    println var2 
    println var3 // This won't work, because not in script scope. 
} 
+2

+1來在Groovy 1中使用新的東西。8:D – 2011-06-11 12:18:37

+20

只需要注意Field @requires an import .. import groovy.transform.Field – khylo 2013-01-09 10:43:44

+0

有趣的嘗試編輯來改變然後比在第一行,SO想要一個六字符編輯! – JimLohse 2016-01-15 18:50:49

1

我想你是在談論班級變量。 如上所述,使用全局變量/類級別變量不是一種好的做法。

如果你真的想使用它。如果你確定不會有影響...

聲明方法外的任何變量。在類級別同列變量類型

如:

{ 
    method() 
    { 
     a=10 
     print(a) 
    } 

// def a or int a wont work 

a=0 

} 
+0

它可能不是一個乾淨的方法,但它的工作;)謝謝。 – 2016-08-03 11:42:22

1
def sum = 0 

// This method stores a value in a global variable. 
def add = 
{ 
    input1 , input2 -> 
    sum = input1 + input2; 
} 

// This method uses stored value. 
def multiplySum = 
{ 
    input1 -> 
     return sum*input1; 
} 

add(1,2); 
multiplySum(10); 
2
def iamnotglobal=100 // This will not be accessible inside the function 

iamglobal=200 // this is global and will be even available inside the 

def func() 
{ 
    log.info "My value is 200. Here you see " + iamglobal 
    iamglobal=400 
    //log.info "if you uncomment me you will get error. Since iamnotglobal cant be printed here " + iamnotglobal 
} 
def func2() 
{ 
    log.info "My value was changed inside func to 400 . Here it is = " + iamglobal 
} 
func() 
func2() 

這裏iamglobal變量是FUNC,然後使用一個全局變量再次提供給FUNC2