2009-07-23 7 views
12

(नौसिखिया सवाल के लिए खेद है।) रूबी में, क्या छोरों के बीच अंतर है कार्य करें:रूबी: @ cars.each do | कार के बीच अंतर | और @cars में कार के लिए

@cars.each do |car| 

और

for car in @cars do 

?

वहाँ दक्षता में एक फर्क है, या एक ही बात को व्यक्त करने के कारण है कि हम दो (या अधिक) के तरीके की जरूरत है? दूसरा तरीका मेरे लिए अधिक सुरुचिपूर्ण/प्राकृतिक लगता है, लेकिन मुझे कुछ महत्वपूर्ण अवलोकन याद आ रहे हैं, पहला क्यों बेहतर विकल्प हो सकता है।

उत्तर

20

अधिक लोगों @cars.each संकेतन का उपयोग क्योंकि कि अन्य विधियों (जैसे #inject, #each_with_index, #map, आदि, और साथ ही गैर इटरेटर कॉलबैक) को सामान्यीकृत।

के लिए/में मुख्य रूप से #each के लिए बस वाक्यात्मक चीनी है। कैसे दो काम चर scoping में है में मुख्य अंतर:

irb> @cars = %w{ ford chevy honda toyota } 
#=> ["ford", "chevy", "honda", "toyota"] 
irb> @cars.each { |car| puts car } 
ford 
chevy 
honda 
toyota 
#=> ["ford", "chevy", "honda", "toyota"] 
irb> car 
NameError: undefined local variable or method `car` for #<Object:0x399770 @cars=["ford", "chevy", "honda", "toyota"]> 
     from (irb):3 
     from /usr/local/bin/irb:12:in `<main>` 
irb> for car in @cars 
    puts car.reverse 
    end 
drof 
yvehc 
adnoh 
atoyot 
#=> ["ford", "chevy", "honda", "toyota"] 
irb> car 
#=> "toyota" 

के लिए/में बाद में दायरे में इटरेटर चर छोड़ देता है, जबकि #each नहीं करता है।

व्यक्तिगत रूप से, मैं गहरे लाल रंग का के लिए/के उपयोग कभी नहीं वाक्य रचना में।

+1

+1 - यही कारण है कि मेरा उत्तर की तुलना में काफी बेहतर है जल्दी और महान उत्तर के लिए – DanSingerman

+0

धन्यवाद! :) – jacob

+0

+1: यह अजीब है। सी # लूपवार निर्माण के लिए बाहर नहीं रहता है। वैसे भी रहना सभी को और अधिक कारण के लिए प्रत्येक – Gishu

2

मुझे लगता है कि यह सिर्फ वाक्य रचनात्मक चीनी है। यह कार्यात्मक रूप से समतुल्य है, और मुझे दुभाषिया में किसी भी कार्यान्वयन अंतर से अवगत नहीं है।

नोट - आप दूसरे पर 'डू' खो सकते हैं।

संबंधित मुद्दे