답변:
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
아래 의 해결책은 그 문제를 해결하는 방법입니다.
var1 = 'var1'
Groovy를 사용하여 Jenkins Pipeline에서 방법을 시도했지만 작동하지 않았습니다. 나는 사용해야했다@Field var1 = 'var1'
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를 사용하지 않으면 전역
클래스 또는 스크립트 범위에서 변수를 선언 한 다음 메서드 또는 클로저 내에서 액세스하면됩니다. 예가 없으면 특정 문제에 대해 더 구체적으로 말하기가 어렵습니다.
그러나 전역 변수는 일반적으로 잘못된 형식으로 간주됩니다.
한 함수에서 변수를 반환 한 다음 다음 함수로 전달하지 않는 이유는 무엇입니까?
나는 당신이 클래스 수준 변수에 대해 이야기하고 있다고 생각합니다. 위에서 언급했듯이 전역 변수 / 클래스 수준 변수를 사용하는 것은 좋은 방법이 아닙니다.
정말로 사용하고 싶다면. 영향이 없을 것이라고 확신한다면 ...
메서드 외부에 변수를 선언하십시오. 변수 유형이없는 클래스 수준에서
예 :
{
method()
{
a=10
print(a)
}
// def a or int a wont work
a=0
}