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

时间:2010-03-17 15:36:48

标签: ruby yield

我有一个采用代码块的方法。

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? }

我知道这个例子可以不收益地完成,但这只是为了说明。

1 个答案:

答案 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