48

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

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

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

4

1 回答 1

70

本质上,您不能传递多个块,但可以传递多个 proc 或 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
于 2010-03-17T16:03:31.427 回答