如何在Groovy中创build和访问全局variables?

我需要在一个方法中存储一个variables的值,然后我需要在另一个方法或闭包中使用该variables的值。 我怎样才能分享这个价值?

在Groovy脚本中,范围可能与预期不同。 这是因为一个Groovy脚本本身就是一个带有运行代码的方法的类,但是这些都是运行时完成的。 我们可以通过省略types定义来定义一个variables作为范围,或者在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. } 
 class Globals { static String ouch = "I'm global.." } println Globals.ouch 

只需在类或脚本范围声明variables,然后从您的方法或闭包中访问它。 没有一个例子,虽然很难为你的特定问题更具体。

但是,全局variables通常被认为是不好的forms。

为什么不从一个函数返回variables,然后传递给下一个?

像所有的OO语言一样,Groovy本身没有“全局”的概念(不像BASIC,Python或Perl)。

如果您有几个需要共享相同variables的方法,请使用以下字段:

 class Foo { def a; def foo() { a = 1; } def bar() { print a; } } 

我想你是在谈论class级变数。 如上所述,使用全局variables/类级variables不是一个好的做法。

如果你真的想使用它。 如果你确定不会有影响…

声明方法外的任何variables。 在课堂上一级没有variablestypes

例如:

 { method() { a=10 print(a) } // def a or int a wont work a=0 } 
 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); 

无法弄清楚你想要什么,但你需要这样的东西? :

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

现在bValue包含b的值,它是闭包a中的一个variables。 现在你可以用bValue做任何事情让我知道,如果我误解了你的问题

 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() 

这里iamglobalvariables是func使用的全局variables,然后再次可用于func2