查看: 2512|回复: 6

[已经解决] 关于each方法的疑问

[复制链接]
梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
发表于 2011-2-2 15:49:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 黄亦天 于 2011-2-7 03:31 编辑

each 方法该怎么使用?
它和哪一种循环比较类似?
(F1 翻到眼花…… 终究没找到each方法在哪……)
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。

青山绿水长留生

梦石
0
星屑
50
在线时间
369 小时
注册时间
2010-12-17
回帖
431
发表于 2011-2-2 16:06:15 | 显示全部楼层
[1, 2, 3].each do |i|  p i end
或
[1, 2, 3].each {|i|  p i }


相似的话个人感觉有点像for~in~end

评分

参与人数 1星屑 +200 收起 理由
DeathKing + 200 认可答案

查看全部评分

回复

使用道具 举报

孤独守望

梦石
0
星屑
3144
在线时间
1535 小时
注册时间
2006-10-16
回帖
4223

开拓者贵宾

发表于 2011-2-2 16:11:01 | 显示全部楼层
each在array页里。
引用:
each {|item| .... }
依次使用每个元素来计算块。返回self。

另外to LS 不是像,for就是each。
可以理解成
for i in a
f(i)
end
<=>
a.each(){|i| f(i)}

评分

参与人数 1星屑 +300 收起 理由
DeathKing + 300 认可答案

查看全部评分

菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复

使用道具 举报

梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
 楼主| 发表于 2011-2-2 16:54:11 | 显示全部楼层
  1. a = 0               # 为变量 a 赋值代入 0。
  2. for i in 1..5       # 变量 i 的值按从 1 到 5 的范围变化,
  3.   a += i            #   变量 a 加上 i 的值。
  4. end                 # 循环结束。
  5. p a                 # 显示计算结果。
复制代码
那么F1里的这段,用each方法的话是不是就是这样?
  1. a = 0
  2. [1,2,3,4,5].each{|i|  a += i  }
  3. p a
复制代码
另外想问,| | 和 { } 是做什么用的?
a.each(){|i| f(i)}

这个括号又用在哪里?
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复

使用道具 举报

梦石
0
星屑
80
在线时间
386 小时
注册时间
2007-7-27
回帖
4075

开拓者

发表于 2011-2-2 17:06:13 | 显示全部楼层
没有参数所以把括号省了
{|item|...}可以看一下帮助里面迭代器部分
each方法在array类里面有介绍
此外还有一个用到each的枚举模块Enumerable

点评

补充一点,Enumerable 里的那些抽象迭代函数都是建立在各个实现了 each 方法的“鸭子”类的 each 方法之上的。Enumerable 本身是抽象的。  发表于 2011-2-6 13:14

评分

参与人数 1星屑 +300 收起 理由
DeathKing + 300 认可答案

查看全部评分

吸吸
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

发表于 2011-2-6 10:47:59 | 显示全部楼层
回复 黄亦天 的帖子

a.each() {|i| f(i)}

each()是方法,Ruby里面调用方法可以不加括号,所以直接使用each也是可以的。
||表示需要迭代的是什么,类似于指明for语句中的循环体。
f(i)是每次迭代都要执行的语句。
{}是块,可以简单的认为是一个语句段落,也可以用do..end来表示

使用each的好处就是不用担心漏掉枚举的任何一个元素,想想以前担惊受怕的遍历数组:
  1. ary = [1,2,3,4,5]
  2. for i in 0...ary.size
  3.   p "上山打老虎"
  4. end
复制代码
还得考虑会不会越界而访问到nil,使用each就不用担心,因为它会遍历数组中的每一个元素。
  1. ary = [1,2,3,4,5]
  2. ary.each do |element|
  3.   p "老虎没打着,大着#{element}"
  4. end
复制代码

点评

第一段故意多出一组nil的么  发表于 2011-2-6 11:26

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

孤独守望

梦石
0
星屑
3144
在线时间
1535 小时
注册时间
2006-10-16
回帖
4223

开拓者贵宾

发表于 2011-2-6 11:24:56 | 显示全部楼层
Range isn't Array though method 'each' is defined,right?

点评

Range#to_a  发表于 2011-2-6 12:01
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部