views:

82

answers:

1

I have a method which takes a code block.

  def opportunity
    @opportunities += 1
    if yield
      @performances +=1
    end
  end

and I call it like this:

opportunity { @some_array.empty? }

But how do I pass it more than one code block so that I could use yield twice, something like this:

   def opportunity
     if yield_1
       @opportunities += 1
     end
     if yield_2
       @performances +=1
     end
   end

and:

opportunity {@some_other_array.empty?} { @some_array.empty? }

I am aware that this example could be done without yield, but it's just to illustrate.

Thanks.

+4  A: 

You can't pass multiple blocks, per se, but you can pass multiple procs or lambdas:

Using 1.9 syntax:

opportunity ->{ @some_array.empty? }, ->{ @some_other_array.empty? }

and in the method itself:

def opportunity(lambda1, lambda2)
    if lambda1.()
        @opportunities += 1
    end
    if lambda2.()
        @performances += 1
    end
end
banister