web-dev-qa-db-ja.com

Ruby)で引数として複数のコードブロックを渡す

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

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

この例は譲歩なしで実行できることを私は知っていますが、それは単に説明するためのものです。

40
doctororange

それ自体は複数のブロックを渡すことはできませんが、複数の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
62
horseyguy