खोज…


परिचय

एक Enumerator एक ऑब्जेक्ट है जो एक नियंत्रित फैशन में पुनरावृत्ति को लागू करता है।

लूपिंग के बजाय जब तक कुछ स्थिति संतुष्ट नहीं होती है, तब तक ऑब्जेक्ट आवश्यकतानुसार मानों को एन्यूमरेट करता है। लूप के निष्पादन को तब तक रोक दिया जाता है जब तक कि ऑब्जेक्ट के मालिक द्वारा अगले मूल्य का अनुरोध नहीं किया जाता है।

Enumerators मूल्यों की अनंत धाराओं को संभव बनाते हैं।

पैरामीटर

पैरामीटर विवरण
yield yield जवाब देता yield , जिसे << रूप में उतारा गया है। इस वस्तु की उपज पुनरावृत्ति को लागू करती है।

कस्टम enumerators

आइए फाइबोनैचि संख्याओं के लिए एक Enumerator बनाएं।

fibonacci = Enumerator.new do |yielder|
  a = b = 1
  loop do
    yielder << a
    a, b = b, a + b
  end
end

अब हम किसी भी उपयोग कर सकते हैं Enumerable साथ विधि fibonacci :

fibonacci.take 10
# => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

मौजूदा तरीके

यदि एक पुनरावृत्ति विधि जैसे कि each को बिना किसी ब्लॉक के कहा जाता है, तो एक Enumerator लौटाया जाना चाहिए।

यह enum_for विधि का उपयोग करके किया जा सकता है:

def each
  return enum_for :each unless block_given?

  yield :x
  yield :y
  yield :z
end

इस रचना के लिए प्रोग्रामर सक्षम बनाता Enumerable संचालन:

each.drop(2).map(&:upcase).first
# => :Z

रीवाइंड कर रहा है

प्रगणक को पुनरारंभ करने के लिए rewind का उपयोग करें।

ℕ = Enumerator.new do |yielder|
  x = 0
  loop do
    yielder << x
    x += 1
  end
end

ℕ.next
# => 0

ℕ.next
# => 1

ℕ.next
# => 2

ℕ.rewind

ℕ.next
# => 0


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow