大家都熟悉在别的语言里使用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

 

   从1循环到10,可以这么写:

        for i in 1..10 do

            puts i

        end

    但是ruby更倾向于使用迭代器方法:

        (1..10).each do |i| puts i end

    上述当然还有upto这个方法:

         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 }

 

posted on 2013-08-13 20:57  爱哎唉  阅读(147)  评论(0)    收藏  举报