(对于新手问题,对不起)在
Ruby中,循环有什么区别?
@cars.each do |car|
和
for car in @cars do
?
效率有差异,还是为什么需要两种(或多种)表达方式呢?第二种方式对我来说似乎更为优雅/自然,但是我可能会缺少一些关键的观察,为什么第一个可能是更好的选择.
解决方法
更多的人使用@ 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","toyota"] irb> car NameError: undefined local variable or method `car` for #<Object:0x399770 @cars=["ford","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","toyota"] irb> car #=> "toyota"
for / in在之后的范围内离开迭代器变量,而#each没有.
就个人而言,我从来没有使用ruby的/在语法.