Ruby:@cars.each 之间的区别做 |car|对于@cars 中的汽车

标签 ruby car-analogy

(抱歉新手问题。)在 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", "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​​ 的 for/in 语法。

关于Ruby:@cars.each 之间的区别做 |car|对于@cars 中的汽车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1172324/

相关文章:

面向对象设计 : Car - Connection between Tank and Engine

Haml 内 ruby​​ 对象的 javascript 求值抛出 undefine 方法异常

ruby - 使用 ruby​​ pg gem 准备好的 INSERT 语句示例

ruby-on-rails - Ruby on Rails 将列表拆分或切片为列

java - 如何显示数组列表中的所有元素?

collections - 链表的实际例子是什么?

ruby-on-rails - :alert does not work; :notice does

ruby-on-rails - 每个 Rails 项目都必须有 ruby gem (2011 版)

oop - 为什么分别坚持 get-set 而不是 car.speed() 和 car.speed(55) ?

algorithm - 汽车转向算法?