48

コードブロックを取るメソッドがあります。

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

そして私はそれをこのように呼びます:

opportunity { @some_array.empty? }

しかし、次のように、yieldを2回使用できるように、複数のコードブロックを渡すにはどうすればよいですか。

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またはラムダを渡すことはできます。

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 に答える