Мне нужно сохранить значение в переменной одним методом, а затем мне нужно использовать это значение из этой переменной в другом методе или закрытии. Как я могу поделиться этим значением?
Как создать и получить доступ к глобальным переменным в 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