ruby each..do.. 与 for..in..的区别

转自:http://2015.iteye.com/blog/639234

for和each的区别主要在于:

  1. for是通过调用each实现,因此for更慢一些
  2. for会在each的scope之外创建一个局部变量,这在某些情况下会引发问题

关于第二点,下面的代码可以很好的说明这个问题:

 

Ruby代码   收藏代码
  1. [1, 2, 3].each do |m| puts m end  
  2. puts m # => NameError: undefined local variable or method `m' for main:Object  
  3. for n in [1, 2, 3] do puts n; end  
  4. puts n # => 3  

 

如果你不了解这一点,那么在某些特殊的情况下,你可能会遇到麻烦,下面的代码可以很好的说明for可能引发的问题:

 

Ruby代码   收藏代码
  1. a = []  
  2. for n in [1, 2, 3] do  
  3.   a << Proc.new {puts "#{n}"}  
  4. end  
  5. [1, 2, 3].each do |m|  
  6.   a << Proc.new {puts "#{m}"}  
  7. end  
  8. a.each { |p| p.call } # => 3 3 3 1 2 3  

 

很显然,for循环的结果不是我们所期待的,因此,结论就是:应该尽可能的使用each替代for循环。

 

"for i in [1, 2]"就相当于"i = nil;[1, 2].each do |i|",这才是for真正的问题所在。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值