ब्लाकों, Procs और lambdas (कंप्यूटर विज्ञान में बंद के रूप में) रूबी के सबसे शक्तिशाली पहलुओं में से एक है, और भी सबसे गलत समझा में से एक हैं । ऐसा शायद इसलिए है क्योंकि रूबी एक अद्वितीय तरीके से बंद हो जाती है। चीजों को और अधिक जटिल बनाना यह है कि रुबी के पास बंद करने का उपयोग करने के चार अलग-अलग तरीके हैं, जिनमें से प्रत्येक एक अलग है, और कभी-कभी बकवास होता है। रूबी के भीतर बंद होने के तरीके के बारे में कुछ अच्छी जानकारी के साथ बहुत सी साइटें हैं। लेकिन मुझे अभी तक एक अच्छी, निश्चित मार्गदर्शिका नहीं मिली है।
class Array
def iterate!(&code)
self.each_with_index do |n, i|
self[i] = code.call(n)
end
end
end
array = [1, 2, 3, 4]
array.iterate! do |n|
n ** 2
end
प्रक्रिया, उर्फ, Procs
ब्लाकों, बहुत आसान और वाक्य रचना आसान है लेकिन हम अपने निपटान में कई अलग अलग ब्लॉक हैं और उन्हें कई बार उपयोग कर सकते हैं। इस प्रकार, एक ही ब्लॉक को बार-बार गुजरने के लिए हमें खुद को दोहराने की आवश्यकता होगी। हालांकि, चूंकि रूबी पूरी तरह से ऑब्जेक्ट उन्मुख है, इसे ऑब्जेक्ट के रूप में पुन: प्रयोज्य कोड को सहेजकर इसे साफ़ रूप से संभाला जा सकता है। इस पुन: प्रयोज्य कोड को प्रो (प्रक्रिया के लिए छोटा) कहा जाता है। ब्लॉक और प्रोसेस के बीच एकमात्र अंतर यह है कि एक ब्लॉक एक प्रक्रिया है जिसे सहेजा नहीं जा सकता है, और इस तरह, एक बार उपयोग समाधान है। दो तरह से
class Array
def iterate!(code)
self.each_with_index do |n, i|
self[i] = code.call(n)
end
end
end
array_1 = [1, 2, 3, 4]
array_2 = [2, 3, 4, 5]
square = Proc.new do |n|
n ** 2
end
lambdas
अब तक, आप का इस्तेमाल किया है Procs, उन्हें एक विशेषता के रूप में सीधे गुजर और उन्हें एक चर के रूप में बचत: Procs साथ काम करके, हम आपको निम्न कार्य शुरू कर सकते हैं। ये प्रक्रियाएं अन्य भाषाओं के समान काम करती हैं जो अज्ञात कार्यों या भेड़ के बच्चे हैं। चीजों को और अधिक रोचक बनाने के लिए, रूबी भी रूबी के भीतर उपलब्ध हैं। एक नज़र डालें: जिस तरह से रूबी में बंद का उपयोग करने "की तरह रूबी"
class Array
def iterate!(code)
self.each_with_index do |n, i|
self[i] = code.call(n)
end
end
end
array = [1, 2, 3, 4]
array.iterate!(lambda { |n| n ** 2 })
puts array.inspect
ब्लाकों
सबसे आम, सबसे आसान और यकीनन सबसे ब्लॉकों के साथ है। उनके पास निम्नलिखित परिचित वाक्यविन्यास हैं:
array = [1, 2, 3, 4]
array.collect! do |n|
n ** 2
end
puts array.inspect
# => [1, 4, 9, 16]
इसके लिए धन्यवाद, वास्तव में मेरे लिए सहायक! – duykhoa
धन्यवाद आदमी - बहुत अच्छा उदाहरण है, लेकिन फिक्सम पर निरीक्षण करने का क्या मतलब है? – sekmo