在Ruby中传递多个代码块作为参数

在Ruby中传递多个代码块作为参数

问题描述:

我有一个需要代码块的方法。在Ruby中传递多个代码块作为参数

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

,我这样称呼它:

opportunity { @some_array.empty? }

但我怎么把它传递不止一个代码块,这样我可以用产量的两倍,这样的事情:

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

和:

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

我知道这个例子可以在没有收益的情况下完成,但这只是为了说明。

您无法通过多个块本身,但是你可以通过多种特效或lambda表达式:

使用1.9语法:

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

和方法本身:

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

是否声明函数 – user5020 2015-05-07 19:11:54

+1

Proc.new {}或lambda {}也有效。任何响应'call'的对象都可以工作 – Kylee 2015-09-08 16:35:55

+0

方法'。()'.call'的别名? – MrYoshiji 2015-11-24 19:50:57