- 论坛徽章:
- 0
|
本帖最后由 zuerrong 于 2010-12-06 11:31 编辑
在别的语言里,可能大家都习惯了for、while循环。
但是ruby里有自己特有的循环处理方式,叫做迭代器,它是目标方法。
这个方法接受一个block作为参数。
在ruby里,block的写法可以是 {|c| ...} 也可以是 do |c| ... end。
怎么写取决于各人的习惯。|c|里的表示接受参数。
一般如果一行就采用{}写法,多行就采用do end写法。如:- arr = [1,2,3,4]
- arr.each {|c| puts c}
- arr.each do |c|
- puts "going with " + c.to_s
- end
复制代码 从1循环到10,可以这么写:
- for i in 1..10 do
- puts i
- end
复制代码 但是ruby更倾向于使用迭代器方法:- (1..10).each do |i| puts i end
复制代码 上述当然还有upto这个方法:- 1.upto(10) do |i| puts i end
复制代码 其他的迭代器方法还包括:
打印文件里每一行:- File.new("a.txt").each_line do |s|
- puts s
- end
复制代码 列举目录里每一个文件:- Dir.foreach("/tmp") do |d| puts d end
复制代码 访问数组的每个元素:- arr = [3,2,1,4,0]
- arr.each do |e| puts e end
复制代码 访问数组的下标:- arr.each_index do |i| puts i end
复制代码 访问串的每一个字符:- s="hello"
- s.each_byte do |w| puts w.chr end
复制代码 访问哈希的每一对键值:
- x={"a"=>1,"b"=>2,"c"=>3}
- x.each do |k,v| puts "#{k} #{v}" end
复制代码 遍历哈希的每一个键:- x.each_key do |k| puts k end
复制代码 遍历哈希的每一个值:- x.each_value do |v| puts v end
复制代码 等等。
当然自己写一个迭代器方法也一点不难,例如,模拟数组的each方法,写一个myeach。- x = [3,2,4,0,1]
- class Array
- def myeach
- for i in self do
- yield i
- end
- end
- end
- x.myeach {|s| puts s }
复制代码 |
|