- プログラミング言語 Rubyより
returnを囲っているメソッドは、returnを呼び出してきたメソッドとは必ずしも同じではない。ブロック内でreturn文を使うと、ブロックが終了するだけでは話は終わらない。そして、ブロックを呼び出したイテレータが終了してもまだ話は終わりではない。return文があると、いつでもreturnを囲っているメソッドが終了するのである。囲っているメソッドは、字句的に囲っている(exically enclosing)メソッドとも呼ばれ、ソースコードを見たときにブロックを囲っているメソ\ッドのことである。
- プログラミング言語 Ruby 第2版 153ページ return
def find(array, target) array.each_with_index do |element, index| return index if (element == target) # findから戻る end nil # 要素が見つからなければnilを返す end
これに対して、ブロック内では、nextの後の式や式リストは、ブロックを呼び出したyield文の「戻り値」になる。nextの後に式がなければ、yieldの値はnilになる。
# 157ページより squareroots = data.collect do |x| next 0 if x < 0 # 負数に対しては0を返す Math.sqrt(x) end
ただ、上のコードは、例えば次のように書き換えられる。
squareroots = data.collect do |x| if (x < 0) then 0 else Math.sqrt(x) end end
うーん。nextの使い道が難しいw