メソッドとブロックの戻り値についてのメモ。

yieldの前に変数を置いて、ブロックの戻り値を受け取ることができます。
ブロックの戻り値は、最後に評価された値です。

def my_method
  a = yield
  puts a + " received"
end

my_method do
  "block message"
end        # "block message received"と表示される

ブロック内でbreakを使うと、引数に指定した値がメソッドの戻り値となります。

def my_method
  a = yield
  puts a + " received"
end

my_method do
  break "block message"
end        # => "block message"

メソッド内でreturnを使い、戻り値を指定することができます。

def my_method
  a = yield
  if a == "block message"
    return "same"
  end
  puts a + " received"
end

my_method do
  "block message"
end        # => "same"