한 메서드의 변수에 값을 저장 한 다음 다른 메서드 또는 클로저에서 해당 변수의 값을 사용해야합니다. 이 가치를 어떻게 공유 할 수 있습니까?
답변
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.
}
답변
class Globals {
static String ouch = "I'm global.."
}
println Globals.ouch
답변
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를 사용하지 않으면 전역
답변
모든 OO 언어와 마찬가지로 Groovy는 BASIC, Python 또는 Perl과 달리 그 자체로 “글로벌”개념이 없습니다.
동일한 변수를 공유해야하는 여러 메소드가있는 경우 필드를 사용하십시오.
class Foo {
def a;
def foo() {
a = 1;
}
def bar() {
print a;
}
}
답변
클래스 또는 스크립트 범위에서 변수를 선언 한 다음 메서드 또는 클로저 내에서 액세스하면됩니다. 예가 없으면 특정 문제에 대해 더 구체적으로 말하기가 어렵습니다.
그러나 전역 변수는 일반적으로 잘못된 형식으로 간주됩니다.
한 함수에서 변수를 반환 한 다음 다음 함수로 전달하지 않는 이유는 무엇입니까?
답변
나는 당신이 클래스 수준 변수에 대해 이야기하고 있다고 생각합니다. 위에서 언급했듯이 전역 변수 / 클래스 수준 변수를 사용하는 것은 좋은 방법이 아닙니다.
정말로 사용하고 싶다면. 영향이 없을 것이라고 확신한다면 …
메서드 외부에 변수를 선언하십시오. 변수 유형이없는 클래스 수준에서
예 :
{
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);