2011-06-10 38 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