查看: 1892|回复: 2

[已经解决] 把for循环翻译成each的问题

[复制链接]

聪仔

梦石
0
星屑
6187
在线时间
3077 小时
注册时间
2013-12-26
回帖
3076
发表于 2015-1-22 10:58:46 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
都说for循环这不好那不好,现在已经闹到恨不得要杀死for循环的地步了...
迫于压力,聪聪也不敢用for循环,现在违心地把for循环翻译成each,却遇到了麻烦...
[pre lang="ruby" line="1"]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[/pre]
于是发现每次each循环,局部变量就会初始化,这不是聪聪希望的...
聪聪希望each的b能得到像for的a那样的累加值,循环内部的局部变量不初始化,而且不愿用实例变量、类变量和全局变量...只用局部变量,有什么办法吗...
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-1-22 12:35:40 | 显示全部楼层
本帖最后由 taroxd 于 2015-1-22 12:45 编辑

这种事情要循环做什么

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

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

不推荐 for 的原因,你看完上面那句代码之后,是不是明白一些了呢?

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 我很赞同

查看全部评分

回复

使用道具 举报

聪仔

梦石
0
星屑
6187
在线时间
3077 小时
注册时间
2013-12-26
回帖
3076
 楼主| 发表于 2015-1-22 17:47:29 | 显示全部楼层
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  
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部