روبي: الفرق بين @ cars.ach do | سيارة | وله سيارة في chars تفعل

StackOverflow https://stackoverflow.com/questions/1172324

  •  19-09-2019
  •  | 
  •  

سؤال

(آسف لسؤال مبتدئ.) في روبي، ما هو الفرق بين الحلقات:

@cars.each do |car| 

و

for car in @cars do

?

هل هناك اختلاف في الكفاءة، أو لماذا نحتاج إلى طرق (أو أكثر) للتعبير عن نفس الشيء؟ الطريقة الثانية تبدو أكثر أناقة / طبيعية بالنسبة لي، لكنني قد أفتقد بعض الملاحظات الحاسمة، لماذا قد يكون الأول هو الخيار الأفضل.

هل كانت مفيدة؟

المحلول

المزيد من الناس يستخدمون @cars.each تدوين لأن هذا يعمم طرق أخرى (مثل #inject, #each_with_index, #map, ، إلخ، وكذلك ردود الاتصال غير المكرر).

ل / في هو أساسا فقط السكر النحوي ل #each. وبعد الفرق الرئيسي في كيفية قيام العملان في نطق متغير:

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 لا.

شخصيا، أنا أبدا استخدام روبي ل / في بناء جملة.

نصائح أخرى

أعتقد أنه مجرد سكر النحوي. إنه مكافئ وظيفيا، وأنا لست على علم بأي اختلاف في التنفيذ في المترجم.

ملاحظة - يمكنك أن تفقد "القيام" في الثانية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top