在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
是否声明函数 – user5020 2015-05-07 19:11:54
Proc.new {}或lambda {}也有效。任何响应'call'的对象都可以工作 – Kylee 2015-09-08 16:35:55
方法'。()'.call'的别名? – MrYoshiji 2015-11-24 19:50:57