(抱歉新手问题.)在Ruby中,循环之间有什么区别:
@cars.each do |car|
Run Code Online (Sandbox Code Playgroud)
和
for car in @cars do
Run Code Online (Sandbox Code Playgroud)
?
效率是否存在差异,或者为什么我们需要两种(或更多)方式来表达同样的事情?第二种方式对我来说似乎更优雅/自然,但我可能会错过一些重要的观察,为什么第一种可能是更好的选择.
ram*_*ion 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"
Run Code Online (Sandbox Code Playgroud)
for/in之后将iterator变量放在范围内,而#each不是.
就个人而言,我从不在语法中使用ruby.