ruby-on-railsrubyruby-block

using print inside def having yield statement


I am trying to print inside a function. The function is used for invoking a block. But I don't see the print happening in the function definition. Please shed a light on this. Basically I am not clear with the control flow.

def find_all 
   matching_items = [] 

   self.each do |item|

      if yield(item)
         puts "after yield" #print not happening
         matching_items << item
      end
   end

   matching_items

end

p ['a', 'b','c','c'].find_all { |item| 
  if item == 'a'
     true 
  end   
  } 

Solution

  • If you are trying to re-open the class Array then, this is how you can do it

    class Array
      def find_all(matching_items = [])
        self.each do |item|
          if yield(item)
            puts "after yield" #print not happening
            matching_items << item
          end
        end
        matching_items
      end
    end
    
    p ['a', 'b', 'c', 'c'].find_all { |item|
        if item == 'a'
          true
        end
      }
    

    Output

    after yield
    ["a"]