मैं रूबी के लिए नया हूं, क्या रूबी कार्यों से yield
मूल्यों का कोई तरीका है? यदि हां, तो कैसे? यदि नहीं, आलसी कोड लिखने के मेरे विकल्प क्या हैं?रूबी में पाइथन जेनरेटर की तरह कुछ है?
उत्तर
रुबी का yield
कीवर्ड उसी नाम से पाइथन कीवर्ड से बहुत अलग है, इसलिए इसके द्वारा भ्रमित न हों। रूबी का yield
कीवर्ड एक विधि से जुड़े ब्लॉक को कॉल करने के लिए वाक्य रचनात्मक चीनी है।
निकटतम समकक्ष रूबी की गणनाकर्ता वर्ग है। उदाहरण के लिए, पायथन के बराबर:
def eternal_sequence():
i = 0
while True:
yield i
i += 1
यह है:
def eternal_sequence
Enumerator.new do |enum|
i = 0
while true
enum.yield i # <- Notice that this is the yield method of the enumerator, not the yield keyword
i +=1
end
end
end
तुम भी enum_for
साथ गणना के तरीकों मौजूदा के लिए ूगणकों बना सकते हैं। उदाहरण के लिए, ('a'..'z').enum_for(:each_with_index)
आपको वर्णमाला में उनके स्थान के साथ लोअरकेस अक्षरों का एक गणक देता है। आप इसे each_with_index
जैसे मानक संख्यात्मक विधियों के साथ मुफ्त में प्राप्त करते हैं, ताकि आप अंक प्राप्त करने के लिए केवल ('a'..'z').each_with_index
लिख सकें।
मैं Fibers कि तरह से इस्तेमाल किया देखा है, this article से एक उदाहरण देखें:
fib = Fiber.new do
x, y = 0, 1
loop do
Fiber.yield y
x,y = y,x+y
end
end
20.times { puts fib.resume }
वास्तव में के बाद से एक शाश्वत प्रगणक है में रूबी 1.9 के' Enumerator' Fiber' का उपयोग कर 'कार्यान्वित किया जाता है। वास्तव में, क्योंकि उन्हें जोड़ने के मुख्य कारणों में से एक था, वास्तव में, क्योंकि रूबी 1.8 'अंकुशू का उपयोग निरंतरता है, लेकिन यह एक है) बल्कि अनावश्यक है और बी) उस समय निरंतर रूबी भाषा से हटाया जा रहा था। –
आप lazily, मूल्यों उत्पन्न करने के लिए @ चक के जवाब सही एक है देख रहे हैं।
यदि आप एक संग्रह पर आलसी ढंग से पुन: प्रयास करना चाहते हैं, तो रूबी 2.0 ने नया .lazy
गणक प्रस्तुत किया।
range = 1..Float::INFINITY
puts range.map { |x| x+1 }.first(10) # infinite loop
puts range.lazy.map { |x| x+1 }.first(10) # [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- 1. रूबी में SciPy की तरह कुछ भी?
- 2. क्या रूबी में नल-स्ट्रीम की तरह कुछ है?
- 3. पाइथन जेनरेटर
- 4. पाइथन जेनरेटर
- 5. पाइथन 3 में जेनरेटर की गति 0
- 6. रूबी स्रोत कोड विश्लेषक (पिलिंट की तरह कुछ)
- 7. क्या जावास्क्रिप्ट में रूबी की method_missing सुविधा की तरह कुछ है?
- 8. क्या जावास्क्रिप्ट में PHP की preg_replace_callback() की तरह कुछ है?
- 9. क्या रूबी में मध्यस्थ की तरह PHP में कुछ भी है?
- 10. jQuery.extend() लेकिन कुछ स्टैंडअलोन की तरह कुछ?
- 11. क्या ब्रश __DATA__ की तरह कुछ है?
- 12. क्या पीएमएक्स इंडेक्स की तरह कुछ है?
- 13. एएसपी.नेट में स्मार्ट की तरह कुछ?
- 14. डेटाबेस डिजाइन में विरासत की तरह कुछ
- 15. क्या सीएसएस में jQuery की तरह कुछ है: है()?
- 16. क्या पाइथन में जावा के अज्ञात आंतरिक वर्गों की तरह कुछ है?
- 17. क्या पाइथन में सी ++ का उपयोग करने वाले कीवर्ड की तरह कुछ है?
- 18. जेनरेटर के साथ पाइथन नेस्टेड लूप काम नहीं करता है (कुछ मामलों में)?
- 19. क्या सब कुछ अजगर की तरह अजगर में एक वस्तु है?
- 20. क्या रूबी में सी की तरह "मुख्य" विधि है?
- 21. क्या एंड्रॉइड विकास में टाइमस्पेन की तरह कुछ है?
- 22. क्या जावा में मॉलोक/फ्री की तरह कुछ है?
- 23. क्या जावा में एनोटेशन विरासत की तरह कुछ है?
- 24. क्या पर्ल में जावा/PHP डॉक्स की तरह कुछ है?
- 25. क्या Verilog में __LINE__ की तरह कुछ है?
- 26. क्या लुआ में पॉइंटर्स की तरह कुछ भी है?
- 27. क्या जावास्क्रिप्ट में% d की तरह कुछ है?
- 28. क्या विंडोज में लिनक्स पट्रस सिस्कल की तरह कुछ है?
- 29. क्या सी # में पायथन के गेटैटर() की तरह कुछ है?
- 30. क्या ActiveRecord (Rails) में create_view की तरह कुछ भी है?
'0.step', 1.9 – steenslag