回答:
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
}