def custom_each(array)
  index = 0 
  while index < array.length
    yield array[index]
    index += 1
  end
end 

ages = [12, 45, 67, 89]
p custom_each(ages) { |num| num * 2 }

कोई विचार? मैं कुल शुरुआत कर रहा हूँ?

मैं यह कोर्स कर रहा हूँ https://www.rubyguides.com/2018/10 /रूबी-मानचित्र-विधि/

0
Ayo D Adesanya 19 अक्टूबर 2020, 14:10

2 जवाब

सबसे बढ़िया उत्तर

डिफ़ॉल्ट रूप से फ़ंक्शन में अंतिम निष्पादित अभिव्यक्ति वापस आ जाएगी। ब्लॉक निष्पादन का परिणाम yield array[index] सहेजा नहीं गया है और custom_each फ़ंक्शन से वापस आ गया है। इसलिए यह हमेशा nil लौटाता है

नीचे का प्रयास करें:

def custom_each(array)
  index = 0
  result = []

  while index < array.length
    result << yield(array[index]) # Saves the result of block execution in an array
    index += 1
  end
  result # Returns the result
end

ages = [12, 45, 67, 89]
p custom_each(ages) { |num| num * 2 }

आउटपुट:

[24, 90, 134, 178]
0
user11350468 19 अक्टूबर 2020, 14:33

आपकी custom_each विधि ठीक काम करती है। आपको बस इतना करना है कि ब्लॉक p अंदर ले जाएं:

# built-in each
ages.each { |num| p num * 2 }

# your custom_each
custom_each(ages) { |num| p num * 2 }

आउटपुट:

24
90
134
178

ध्यान दें कि मूल Array#each एक परिवर्तित सरणी भी नहीं लौटाता है। यह एक गणक या मूल सरणी देता है:

[12, 45, 67, 89].each
#=> #<Enumerator: [12, 45, 67, 89]:each>

[12, 45, 67, 89].each { |num| num * 2 }
#=> [12, 45, 67, 89]
1
Stefan 19 अक्टूबर 2020, 17:00