Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

मक्खी पर रूबी एन्यूमरेटर बनाना

जब आप अपने संग्रह को गणक के रूप में मानते हैं, तो आप बिना किसी अतिरिक्त कोड को लिखे अपने सभी पसंदीदा कार्यों जैसे #map और #reduce का उपयोग कर सकते हैं। यह बहुत बढ़िया है।

पुराने दिनों में, गणनाकर्ताओं को परिभाषित करना थोड़ा बोझिल था। आपको एक नया वर्ग बनाना था, संख्यात्मक मॉड्यूल शामिल करना था, और एक #प्रत्येक फ़ंक्शन को परिभाषित करना था।

रूबी 1.9 के बाद से, हमारे पास फ्लाई पर एन्यूमरेटर्स को परिभाषित करने का एक और हल्का तरीका है। आइए एक नज़र डालते हैं।

एन्यूमरेटर वर्ग का परिचय

एन्यूमरेटर क्लास आपको ब्लॉक सिंटैक्स का उपयोग करके एक बार के एन्यूमरेटर को परिभाषित करने देता है। नीचे दिए गए उदाहरण में, हम एक एन्यूमरेटर बनाते हैं जो यादृच्छिक संख्याओं की एक अनंत श्रृंखला देता है।

e = Enumerator.new do |y|
  loop do
    y << rand(10) # The << operator "yields" a value.
  end
end

# Make the enumerator "yield" 10 values, then stop
puts e.first(10).inspect # => [6, 6, 7, 2, 2, 9, 6, 8, 2, 1]

आपने देखा होगा कि हम शिफ्ट ऑपरेटर का उपयोग कर रहे हैं << एक अजीब तरह से। यह y.yield . के लिए एक शॉर्टकट है तरीका। आप इसे एन्यूमरेटर में प्रत्येक आइटम के लिए कॉल करेंगे। अगर यह सब आपको थोड़ा जादुई लगता है, तो चिंता न करें। यह है।

संग्रह का आकार

संग्रह के आकार का पता लगाना रूबी के आलसी गणकों के लिए एक समस्या है। संग्रह में आइटम गिनने के लिए, आपको पूरे संग्रह को लोड करना होगा - जो आलसी गणनाकर्ताओं के उपयोग के पूरे बिंदु के विरुद्ध है।

एक कामकाज है, तरह का। यदि आप गणनाकर्ता बनाते समय संग्रह के आकार को जानते हैं, तो आप इसे प्रदान कर सकते हैं।

# You can pass the length as an argument to the constructor, if you have it
e = Enumerator.new(10) do |y|
  10.times { y << rand }
end

मेरा असली दुनिया का उदाहरण

कल ही मैं हनीबैगर की नई प्रलेखन साइट पर काम कर रहा था। यह Jekyll का उपयोग करके बनाया गया है, और मैं <h2> के आधार पर सामग्री की एक तालिका बनाने के लिए एक प्लगइन लिख रहा था। और <h3> दस्तावेज़ीकरण में टैग।

यह पता लगाना अजीब है कि कौन सा <h3> टैग <h2> . द्वारा परिभाषित एक अनुभाग से संबंधित हैं टैग। आपको नोकोगिरी का उपयोग करके HTML को पार्स करना होगा, और फिर परिणामी दस्तावेज़ को स्कैन करना होगा। इसलिए मैंने उस बिट कोड को सारणित किया और इसे एक एन्यूमरेटर बना दिया। यह कैसा दिखता है।

def subheadings(el)
  Enumerator.new do |y|
    next_el = el.next_sibling
    while next_el && next_el.name != "h2"
      if next_el.name == "h3"
        y << next_el
      end
      next_el = next_el.next_sibling
    end
  end
end

  1. रूबी में डेकोरेटर डिजाइन पैटर्न

    डेकोरेटर डिजाइन पैटर्न क्या है? और आप अपने रूबी प्रोजेक्ट्स में इस पैटर्न का उपयोग कैसे कर सकते हैं? डेकोरेटर डिज़ाइन पैटर्न नई क्षमताओं . जोड़कर किसी ऑब्जेक्ट को बेहतर बनाने में आपकी सहायता करता है इसमें बिना कक्षा बदले। आइए एक उदाहरण देखें! लॉगिंग और प्रदर्शन इस उदाहरण में हम रेस्ट-क्लाइंट जैस

  1. रूबी इंटर्नल्स:रूबी ऑब्जेक्ट्स के मेमोरी लेआउट को एक्सप्लोर करना

    क्या आप रूबी इंटर्नल का एक त्वरित दौरा चाहेंगे? फिर आप एक दावत के लिए तैयार हैं। क्योंकि … हम एक साथ यह पता लगाने जा रहे हैं कि रूबी ऑब्जेक्ट को मेमोरी में कैसे रखा जाता है और आप कुछ अच्छी चीजें करने के लिए आंतरिक डेटा संरचनाओं में कैसे हेरफेर कर सकते हैं। अपनी सीट बेल्ट बांधें और रूबी दुभाषिया

  1. रूबी केस स्टेटमेंट के कई उपयोग

    जब भी आपको कुछ if / elsif . का उपयोग करने की आवश्यकता हो आप इसके बजाय रूबी केस स्टेटमेंट का उपयोग करने पर विचार कर सकते हैं। इस पोस्ट में, आप कुछ अलग उपयोग के मामलों के बारे में जानेंगे और यह सब वास्तव में हुड के तहत कैसे काम करता है। नोट:अन्य प्रोग्रामिंग भाषाओं में इसे स्विच . के रूप में जाना