Мне нужно сохранить значение в переменной одним методом, а затем мне нужно использовать это значение из этой переменной в другом методе или закрытии. Как я могу поделиться этим значением?
Как создать и получить доступ к глобальным переменным в Groovy?
Ответ 1
В Groovy script область видимости может отличаться от ожидаемой. Это связано с тем, что Groovy script сам по себе является классом с методом, который будет запускать код, но это все сделано во время выполнения. Мы можем определить переменную, которая будет привязана к script, либо опустив определение типа, либо в 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
class Globals {
   static String ouch = "I'm global.."
}
println Globals.ouch
		Ответ 3
Просто объявите переменную в классе или области script, затем получите доступ к ней из ваших методов или закрытий. Без примера, трудно быть более конкретным для вашей конкретной проблемы.
Однако глобальные переменные обычно считаются плохими.
Почему бы не вернуть переменную из одной функции, а затем передать ее в следующую?
Ответ 4
Как и все языки OO, Groovy не имеет понятия "глобальный" сам по себе (в отличие, скажем, от BASIC, Python или Perl).
Если у вас есть несколько методов, которые должны использовать одну и ту же переменную, используйте поле:
class Foo {
    def a;
    def foo() {
        a = 1;
    }
    def bar() {
        print a;
    }
}
		Ответ 5
Я думаю, вы говорите о переменных уровня класса. Как упоминалось выше, использование переменных глобального уровня/класса не является хорошей практикой.
Если вы действительно хотите его использовать. и если вы уверены, что не будет воздействия...
Объявить любую переменную вне метода. на уровне класса с переменным типом
например:
{
   method()
   {
      a=10
      print(a)
   }
// def a or int a wont work
a=0
}
		Ответ 6
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
Не удалось выяснить, чего вы хотите, но вам нужно что-то вроде этого?:
def a = { b -> b = 1 }
bValue = a()
println b // prints 1
Теперь bValue содержит значение b, которое является переменной в замыкании a. Теперь вы можете сделать что-нибудь с bValue Сообщите мне, если я неправильно понял ваш вопрос
Ответ 8
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