Ruby: различие между @cars.each делает |car | и для автомобиля в @cars делают

У меня никогда не было проблемы с выполнением его как это:

<form>
  <div>
    <input type="checkbox" id="cb" /> <label for="cb">Label text</label>
  </div>
</form>
12
задан crowne 3 November 2010 в 16:41
поделиться

2 ответа

Все больше людей используют нотацию @ cars.each , потому что она обобщается на другие методы (например, #inject , #each_with_index , #map и т. Д., А также обратные вызовы без итератора).

for / in в основном просто синтаксический сахар для #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"

for / in оставляет переменную итератора в области видимости впоследствии, а #each - нет.

Лично я никогда не использую ruby ​​для / в синтаксисе.

20
ответ дан 2 December 2019 в 07:03
поделиться

Я думаю, что это просто синтаксический сахар. Он функционально эквивалентен, и мне не известно о каких-либо различиях в реализации интерпретатора.

Обратите внимание - вы можете потерять «do» на втором.

2
ответ дан 2 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: