设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2109|回复: 6
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4422
在线时间
1911 小时
注册时间
2010-12-21
帖子
2365
跳转到指定楼层
1
发表于 2011-2-2 15:49:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

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

Lv1.梦旅人

青山绿水长留生

梦石
0
星屑
50
在线时间
369 小时
注册时间
2010-12-17
帖子
442
2
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

3
发表于 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 认可答案

查看全部评分

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4422
在线时间
1911 小时
注册时间
2010-12-21
帖子
2365
4
 楼主| 发表于 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)}

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

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
386 小时
注册时间
2007-7-27
帖子
4106

开拓者

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

点评

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

评分

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

查看全部评分

吸吸
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1195
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

6
发表于 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的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

7
发表于 2011-2-6 11:24:56 | 只看该作者
Range isn't Array though method 'each' is defined,right?

点评

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-23 02:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表