Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing multiple code blocks as arguments in Ruby

Tags:

yield

ruby

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.

like image 589
doctororange Avatar asked Mar 17 '10 15:03

doctororange


1 Answers

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 
like image 57
horseyguy Avatar answered Sep 22 '22 21:09

horseyguy