我有一个采用代码块的方法。
def opportunity
@opportunities += 1
if yield
@performances +=1
end
end
我称之为:
opportunity { @some_array.empty? }
但是我如何传递多个代码块以便我可以使用yield两次,如下所示:
def opportunity
if yield_1
@opportunities += 1
end
if yield_2
@performances +=1
end
end
和
opportunity {@some_other_array.empty?} { @some_array.empty? }
我知道这个例子可以不收益地完成,但这只是为了说明。
答案 0 :(得分:59)
你本身不能传递多个块,但是你可以传递多个proc或lambdas:
使用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