大家都熟悉在别的语言里使用for、while循环。但在ruby里有自己特有的循环处理方式,叫做迭代器,它是目标方法,一个能接受代码块的方法。
[1,2,3,4,5].each { |i|
puts i
}
上述代码中,each方法反复调用代码块,我们称each方法为一个迭代器。
在比如方法接受一个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
for i in 1..10 do
puts i
end
但是ruby更倾向于使用迭代器方法:(1..10).each do |i| puts i end
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 }
浙公网安备 33010602011771号