- プログラミング言語 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