Project1

标题: 关于each方法的疑问 [打印本页]

作者: 黄亦天    时间: 2011-2-2 15:49
标题: 关于each方法的疑问
本帖最后由 黄亦天 于 2011-2-7 03:31 编辑

each 方法该怎么使用?
它和哪一种循环比较类似?
(F1 翻到眼花…… 终究没找到each方法在哪……)
作者: 幻想乡茶农    时间: 2011-2-2 16:06
[1, 2, 3].each do |i|  p i end

[1, 2, 3].each {|i|  p i }


相似的话个人感觉有点像for~in~end
作者: IamI    时间: 2011-2-2 16:11
each在array页里。
引用:
each {|item| .... }
依次使用每个元素来计算块。返回self。

另外to LS 不是像,for就是each。
可以理解成
for i in a
f(i)
end
<=>
a.each(){|i| f(i)}
作者: 黄亦天    时间: 2011-2-2 16:54
  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)}

这个括号又用在哪里?
作者: trentswd    时间: 2011-2-2 17:06
没有参数所以把括号省了
{|item|...}可以看一下帮助里面迭代器部分
each方法在array类里面有介绍
此外还有一个用到each的枚举模块Enumerable
作者: DeathKing    时间: 2011-2-6 10:47
回复 黄亦天 的帖子

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
复制代码

作者: IamI    时间: 2011-2-6 11:24
Range isn't Array though method 'each' is defined,right?





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