উত্তর:
গ্রোভির স্ক্রিপ্টে স্কোপিং প্রত্যাশার চেয়ে আলাদা হতে পারে। এর কারণ এটি একটি গ্রোভি স্ক্রিপ্ট নিজেই এমন একটি ক্লাস যা একটি পদ্ধতি চালায় যা কোড চালায়, তবে এটি রানটাইম সম্পন্ন হয়। টাইপ সংজ্ঞা বাদ দিয়ে বা গ্রোভি ১.৮ এ আমরা @ ফিল্ড টীকা যুক্ত করতে পারি স্ক্রিপ্টে স্কোপ করার জন্য আমরা একটি পরিবর্তনশীলকে সংজ্ঞায়িত করতে পারি।
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'
গ্রোভিকে ব্যবহার করে জেনকিনস পাইপলাইনে আমি পদ্ধতিটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি। আমাকে ব্যবহার করতে হয়েছিল@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 পরিবর্তনশীল একটি বিশ্বব্যাপী দ্বারা ব্যবহৃত পরিবর্তনশীল func করুন এবং তারপর আবার উপলব্ধ func2
যদি আপনার সাথে ভেরিয়েবল ডিক্লেয়ার Def এটা, স্থানীয় করা হবে যদি আপনি Def তার বিশ্বব্যাপী ব্যবহার করবেন না
সমস্ত ওও ভাষার মতো, গ্রোভির নিজের দ্বারা "গ্লোবাল" কোনও ধারণা নেই (বিস্মৃত, বলুন, বেসিক, পাইথন বা পার্ল)।
যদি আপনার বেশ কয়েকটি পদ্ধতি থাকে তবে একই চলকটি ভাগ করে নেওয়া দরকার তবে একটি ক্ষেত্রটি ব্যবহার করুন:
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);
আপনি কী চান তা অনুধাবন করতে পারিনি, তবে আপনার এই জাতীয় কিছু দরকার? :
def a = { b -> b = 1 }
bValue = a()
println b // prints 1
এখন bValue
মানটির মধ্যে রয়েছে b
যা বন্ধের ক্ষেত্রে একটি পরিবর্তনশীল a
। আপনারা এখন যা কিছু করতে bValue
পারেন আমি যদি আপনার প্রশ্নটি ভুল বুঝে থাকি তবে আমাকে জানান