Saya perlu menyimpan nilai dalam variabel dalam satu metode dan kemudian saya perlu menggunakan nilai itu dari variabel itu di metode atau penutupan lain. Bagaimana saya bisa membagikan nilai ini?
128
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'
sumber
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
sumber
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:
sumber
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?
sumber
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:
sumber
sumber
Tidak dapat menemukan apa yang Anda inginkan, tetapi Anda membutuhkan sesuatu seperti ini? :
Sekarang
bValue
berisi nilaib
yang merupakan variabel di closurea
. Sekarang Anda dapat melakukan apa saja denganbValue
Beri tahu saya jika saya salah memahami pertanyaan Andasumber