Jawaban:
Dalam skrip Groovy, cakupannya bisa berbeda dari yang diharapkan. Itu karena skrip Groovy itu sendiri adalah kelas dengan metode yang akan menjalankan kode, tetapi itu semua dilakukan runtime. Kita dapat mendefinisikan variabel untuk dicakup ke skrip dengan menghilangkan definisi tipe atau di Groovy 1.8 kita dapat menambahkan anotasi @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
solusi di bawah ini adalah cara di sekitar itu.
var1 = 'var1'
metode di Jenkins Pipeline menggunakan Groovy dan tidak berhasil. Saya harus menggunakan@Field var1 = 'var1'
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()
di sini variabel iamglobal adalah variabel global yang digunakan oleh func dan kemudian tersedia lagi untuk func2
jika Anda mendeklarasikan variabel dengan def itu akan menjadi lokal, jika Anda tidak menggunakan def globalnya
Seperti semua bahasa OO, Groovy tidak memiliki konsep "global" dengan sendirinya (tidak seperti, katakanlah, BASIC, Python atau Perl).
Jika Anda memiliki beberapa metode yang perlu membagikan variabel yang sama, gunakan kolom:
class Foo {
def a;
def foo() {
a = 1;
}
def bar() {
print a;
}
}
Cukup deklarasikan variabel di kelas atau skrip skop, lalu akses dari dalam metode atau closure Anda. Tanpa contoh, sulit untuk lebih spesifik untuk masalah khusus Anda.
Namun, variabel global umumnya dianggap bentuk yang buruk.
Mengapa tidak mengembalikan variabel dari satu fungsi, lalu meneruskannya ke fungsi berikutnya?
Saya pikir Anda berbicara tentang variabel tingkat kelas. Seperti disebutkan di atas, menggunakan variabel global / variabel tingkat kelas bukanlah praktik yang baik.
Jika Anda benar-benar ingin menggunakannya. dan jika Anda yakin tidak akan ada dampak ...
Deklarasikan variabel apa pun di luar metode. di tingkat kelas tanpa tipe variabel
misalnya:
{
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);
Tidak dapat menemukan apa yang Anda inginkan, tetapi Anda membutuhkan sesuatu seperti ini? :
def a = { b -> b = 1 }
bValue = a()
println b // prints 1
Sekarang bValue
berisi nilai b
yang merupakan variabel di closure a
. Sekarang Anda dapat melakukan apa saja dengan bValue
Beri tahu saya jika saya salah memahami pertanyaan Anda