Muszę przechowywać wartość w zmiennej w jednej metodzie, a następnie muszę użyć tej wartości z tej zmiennej w innej metodzie lub zamknięciu. Jak mogę podzielić się tą wartością?
128
W skrypcie Groovy zakres może być inny niż oczekiwano. Dzieje się tak, ponieważ skrypt Groovy sam w sobie jest klasą z metodą, która uruchomi kod, ale wszystko jest gotowe w czasie wykonywania. Możemy zdefiniować zmienną, która ma być objęta zakresem skryptu, albo pomijając definicję typu, albo w Groovy 1.8 możemy dodać adnotację @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
rozwiązanie pozwala to obejść.var1 = 'var1'
metodę w Jenkins Pipeline przy użyciu Groovy i nie zadziałała. Musiałem użyć@Field var1 = 'var1'
źródło
tutaj zmienna iamglobal jest zmienną globalną używaną przez func, a następnie ponownie dostępną dla func2
jeśli zadeklarujesz zmienną za pomocą def , będzie ona lokalna, jeśli nie użyjesz def, jej wartość globalna
źródło
Podobnie jak wszystkie języki OO, Groovy nie ma samego pojęcia „globalnego” (w przeciwieństwie do, powiedzmy, BASICa, Pythona czy Perla).
Jeśli masz kilka metod, które wymagają współużytkowania tej samej zmiennej, użyj pola:
źródło
Po prostu zadeklaruj zmienną w zakresie klasy lub skryptu, a następnie uzyskaj do niej dostęp z wnętrza metod lub zamknięć. Jednak bez przykładu trudno jest określić konkretny problem.
Jednak zmienne globalne są ogólnie uważane za złą formę.
Dlaczego nie zwrócić zmiennej z jednej funkcji, a następnie przekazać ją do następnej?
źródło
Myślę, że mówisz o zmiennych na poziomie klasy. Jak wspomniano powyżej, używanie zmiennych globalnych na poziomie zmiennych / klas nie jest dobrą praktyką.
Jeśli naprawdę chcesz go używać. i jeśli jesteś pewien, że nie będzie wpływu ...
Zadeklaruj dowolną zmienną poza metodą. na poziomie klasy bez typu zmiennej
na przykład:
źródło
źródło
Nie możesz dowiedzieć się, czego chcesz, ale potrzebujesz czegoś takiego? :
Teraz
bValue
zawiera wartość,b
która jest zmienną w zamknięciua
. Teraz możesz zrobić wszystko, korzystając z opcjibValue
Daj mi znać, jeśli źle zrozumiałem Twoje pytanieźródło