Project1

标题: 把for循环翻译成each的问题 [打印本页]

作者: 正太君    时间: 2015-1-22 10:58
标题: 把for循环翻译成each的问题
都说for循环这不好那不好,现在已经闹到恨不得要杀死for循环的地步了...
迫于压力,聪聪也不敢用for循环,现在违心地把for循环翻译成each,却遇到了麻烦...
RUBY 代码复制
  1. def ke_lian_de_for
  2.   for i in 0...5
  3.     a = 0 if a.nil?
  4.     a += 5
  5.     p [1, a] # => [1,5] [1,10] [1,15] [1,20] [1,25]
  6.   end
  7.   (0...5).each{|i|
  8.     b = 0 if b.nil?
  9.     b += 5
  10.     p [2, b] # => [2,5] [2,5] [2,5] [2,5] [2,5]
  11.   }
  12. end  
  13. ke_lian_de_for

于是发现每次each循环,局部变量就会初始化,这不是聪聪希望的...
聪聪希望each的b能得到像for的a那样的累加值,循环内部的局部变量不初始化,而且不愿用实例变量、类变量和全局变量...只用局部变量,有什么办法吗...
作者: taroxd    时间: 2015-1-22 12:35
本帖最后由 taroxd 于 2015-1-22 12:45 编辑

这种事情要循环做什么

RUBY 代码复制
  1. 5.step(25, 5) { |i| p [1, i] } # => [1,5] [1,10] [1,15] [1,20] [1,25]


块中定义的局部变量在块结束后会消失,这正是 each 之类的迭代器的优越性之一。
不想让局部变量消失的话,在块的*外面*给局部变量赋值就好了。

不推荐 for 的原因,你看完上面那句代码之后,是不是明白一些了呢?
作者: 正太君    时间: 2015-1-22 17:47
taroxd 发表于 2015-1-22 12:35
这种事情要循环做什么

5.step(25, 5) { |i| p [1, i] } # => [1,5] [1,10] [1,15] [1,20] [1,25] [/pre]

原来在块外面定义局部变量就能解决了...谢谢TD版主大人...
我这个for和each只是为了说清楚问题写的简单例子,实际问题不是这么简单...真是这么简单的循环也也不会照这么写的...总之谢谢...
顺便请版主大人结帖...@VIPArcher  




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1