如何在 Groovy 中创建和访问全局变量?

我需要在一个方法中的变量中存储一个值,然后我需要在另一个方法或闭包中使用该变量的值。我如何分享这个价值?

190592 次浏览

只需在类或脚本范围内声明变量,然后从方法或闭包内访问它。但是,如果没有示例,就很难对您的特定问题进行更具体的说明。

然而,全局变量通常被认为是不好的形式。

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

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

如果有几个方法需要共享同一个变量,请使用一个字段:

class Foo {
def a;


def foo() {
a = 1;
}
def bar() {
print a;
}
}
class Globals {
static String ouch = "I'm global.."
}


println Globals.ouch

不知道你想要什么,但你需要这样的东西? :

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

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

在 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.
}

我认为你说的是类级别的变量。 如上所述,使用全局变量/类级别变量不是一个好的做法。

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

在类级别声明方法外的任何变量,而不声明变量类型

例如:

{
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 i_am_not_global = 100 // This will not be accessible inside the function


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


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

这里的 i_am_global变量是 func使用的一个全局变量,然后再次提供给 func2

如果你用 def声明变量,它将是局部的,如果你不使用 def 它的全局