我需要在一个方法中将值存储在变量中,然后我需要在另一个方法或闭包中使用该变量中的值。我该如何分享这个价值?
答案 0 :(得分:157)
在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.
}
答案 1 :(得分:43)
class Globals {
static String ouch = "I'm global.."
}
println Globals.ouch
答案 2 :(得分:15)
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
如果您使用 def 声明变量,那么它将是本地的,如果您不使用def其全局
答案 3 :(得分:3)
与所有OO语言一样,Groovy本身没有“全局”的概念(不像BASIC,Python或Perl)。
如果您有多个方法需要共享同一个变量,请使用字段:
class Foo {
def a;
def foo() {
a = 1;
}
def bar() {
print a;
}
}
答案 4 :(得分:2)
只需在类或脚本范围声明变量,然后从方法或闭包中访问它。如果没有一个例子,很难对你的特定问题更加具体。
但是,全局变量通常被视为不良形式。
为什么不从一个函数返回变量,然后将其传递给下一个?
答案 5 :(得分:1)
我认为你在谈论班级变量。 如上所述,使用全局变量/类级别变量不是一个好习惯。
如果你真的想使用它。如果你确定不会有影响...
在方法外面声明任何变量。在类级别,没有变量类型
例如:
{
method()
{
a=10
print(a)
}
// def a or int a wont work
a=0
}
答案 6 :(得分: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);
答案 7 :(得分:0)
无法弄清楚你想要什么,但你需要这样的东西吗? :
def a = { b -> b = 1 }
bValue = a()
println b // prints 1
现在bValue
包含b
的值,它是闭包a
中的变量。现在你可以对bValue
做任何事情。如果我误解了你的问题,请告诉我