जवाबों:
एक ग्रूवी स्क्रिप्ट में स्कोपिंग उम्मीद से अलग हो सकती है। ऐसा इसलिए है क्योंकि अपने आप में एक ग्रूवी स्क्रिप्ट एक ऐसी विधि है जो कोड को चलाएगी, लेकिन यह सब रनटाइम के अनुसार होता है। हम स्क्रिप्ट को स्कूप करने के लिए एक चर को परिभाषित कर सकते हैं या तो टाइप परिभाषा को छोड़ कर या ग्रूवी 1.8 में हम @ फ़िड एनोटेशन जोड़ सकते हैं।
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 का उपयोग करते हुए जेनकिन्स पाइपलाइन में विधि की कोशिश की और यह काम नहीं किया। मैं का उपयोग करना था@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()
यहाँ iamglobal चर एक वैश्विक द्वारा इस्तेमाल किया चर रहा है समारोह और उसके बाद फिर करने के लिए उपलब्ध func2
यदि आप के साथ चर घोषित डीईएफ़ यह, स्थानीय हो सकता है अगर आप डीईएफ़ अपनी वैश्विक का उपयोग नहीं करते
सभी OO भाषाओं की तरह, Groovy की अपने आप में "ग्लोबल" की कोई अवधारणा नहीं है (इसके विपरीत, कहें, BASIC, पायथन या पेरेंट)।
यदि आपके पास कई विधियाँ हैं जिन्हें एक ही चर को साझा करने की आवश्यकता है, तो एक फ़ील्ड का उपयोग करें:
class Foo {
def a;
def foo() {
a = 1;
}
def bar() {
print a;
}
}
बस कक्षा या स्क्रिप्ट के दायरे में चर को घोषित करें, फिर इसे अपने तरीकों या बंदियों के अंदर से एक्सेस करें। एक उदाहरण के बिना, आपकी विशेष समस्या के लिए अधिक विशिष्ट होना कठिन है।
हालांकि, वैश्विक चर को आमतौर पर बुरा रूप माना जाता है।
एक फ़ंक्शन से चर वापस क्यों नहीं किया जाता है, तो इसे अगले में पास करें?
मुझे लगता है कि आप वर्ग स्तर चर के बारे में बात कर रहे हैं। जैसा कि ऊपर उल्लेख किया गया है वैश्विक चर / वर्ग स्तर चर का उपयोग करना अच्छा अभ्यास नहीं है।
यदि आप वास्तव में इसका उपयोग करना चाहते हैं। और यदि आप सुनिश्चित हैं कि प्रभाव नहीं होगा ...
किसी चर को विधि की ओर से घोषित करें। चर प्रकार के साथ वर्ग स्तर पर
उदाहरण के लिए:
{
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);