each 迭代器
在很多语言里可以使用 for、while 做循环(Ruby 也可以),但是 Ruby 还有一种独特的循环处理方式,叫做迭代器。比如:
#!/usr/bin/ruby
shuzu = Array[1,2,3,4]
shuzu.each {|n| puts 2*n}
这就是一个 each 迭代器,each 反复调用 大括号中的代码块,将数组的每个元素乘2,打印出来。
代码块可以用 {|x| ……}
形式,也可以是 do |x| …… end
形式。一般情况下我们选择 {}
写法,代码块多行时采用 do end
写法。
刚才的迭代器其实可以用 for 循环实现:
for n in 1..4 do
puts 2*n
end
但显然使用迭代器更加方便。
collect 迭代器
除了 each 迭代器,还有一种常用的 collect 迭代器。
它们之间的区别是,each 迭代器连续访问集合中的每个元素,而 collect 迭代器从集合中获得各个元素,返回的结果生成新的集合。举例说明更好理解:
shuzu = Array[1,2,3,4]
shuzu_each = shuzu.each {|n| n=2*n}
shuzu_collect = shuzu.collect {|n| n=2*n}
puts "#{shuzu}"
puts "#{shuzu_each}"
puts "#{shuzu_collect}"
puts "#{shuzu}"
运行: