不理解Proc的这个背景过程

时间:2016-04-20 23:21:15

标签: ruby proc

我遇到了解决问题,我的解决方案如下。

    class Array
      def my_each(&prc)
        prc ||= proc { |ele| puts ele }
        idx = 0
        while idx < self.length
          prc.call(self[idx])
          idx += 1
        end
        self
      end
    end

    puts ["apple", "banana"].my_each {}   #=> ["apple, "banana"]

我的问题是,为什么结果不是

    #=>"apple" 
    #=>"banana"  
    #=>["apple", "banana"]

这是因为我的块没有运行而且只返回了self?

1 个答案:

答案 0 :(得分:2)

原因很简单:您的区块是空的,它没有做任何事情。

如果要打印单个项目,则需要在块中打印它们:

puts ["apple", "banana"].my_each {|el| puts el }
# apple
# banana
# apple
# banana

或者不传递一个块,以便你的默认块触发:

puts ["apple", "banana"].my_each
# apple
# banana
# apple
# banana