Ruby:@ cars.each do | car |之间的区别在@cars做车

时间:2009-07-23 14:51:46

标签: ruby car-analogy

(抱歉新手问题。)在Ruby中,循环之间有什么区别:

@cars.each do |car| 

for car in @cars do

是否存在效率差异,或者为什么我们需要两种(或更多)方式来表达同样的事情?第二种方式对我来说似乎更优雅/自然,但我可能会错过一些重要的观察,为什么第一种可能是更好的选择。

2 个答案:

答案 0 :(得分:20)

更多人使用@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之后将iterator变量保留在范围内,而#each则不然。

就个人而言,我从不在语法中使用ruby。

答案 1 :(得分:2)

我认为这只是语法糖。它在功能上是等价的,我不知道解释器中的任何实现差异。

注意 - 你可以在第二个上丢失'do'。