Project1
标题: 把for循环翻译成each的问题 [打印本页]
作者: 正太君 时间: 2015-1-22 10:58
标题: 把for循环翻译成each的问题
都说for循环这不好那不好,现在已经闹到恨不得要杀死for循环的地步了...
迫于压力,聪聪也不敢用for循环,现在违心地把for循环翻译成each,却遇到了麻烦...
def ke_lian_de_for
for i in 0...5
a = 0 if a.nil?
a += 5
p [1, a] # => [1,5] [1,10] [1,15] [1,20] [1,25]
end
(0...5).each{|i|
b = 0 if b.nil?
b += 5
p [2, b] # => [2,5] [2,5] [2,5] [2,5] [2,5]
}
end
ke_lian_de_for
def ke_lian_de_for
for i in 0...5
a = 0 if a.nil?
a += 5
p [1, a] # => [1,5] [1,10] [1,15] [1,20] [1,25]
end
(0...5).each{|i|
b = 0 if b.nil?
b += 5
p [2, b] # => [2,5] [2,5] [2,5] [2,5] [2,5]
}
end
ke_lian_de_for
于是发现每次each循环,局部变量就会初始化,这不是聪聪希望的...
聪聪希望each的b能得到像for的a那样的累加值,循环内部的局部变量不初始化,而且不愿用实例变量、类变量和全局变量...只用局部变量,有什么办法吗...
作者: taroxd 时间: 2015-1-22 12:35
本帖最后由 taroxd 于 2015-1-22 12:45 编辑
这种事情要循环做什么
5.step(25, 5) { |i| p [1, i] } # => [1,5] [1,10] [1,15] [1,20] [1,25]
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 |