Rubyでは、他の言語のcontinue
のように、どのようにして.each
ループ内のループをスキップするのですか?
next
を使用してください。
(1..10).each do |a|
next if a.even?
puts a
end
プリント:
1
3
5
7
9
追加のクールさについてはredo
とretry
も調べてください。
times
、upto
、downto
、each_with_index
、select
、map
、およびその他のイテレータ(さらに一般的にはブロック)のような友人にも動作します。
詳しくは http://Ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UL をご覧ください。
next
- return
のようですが、ブロック用です。 (したがって、これは任意のproc
/lambda
でも使用できます。)
つまり、ブロックからn
を「返す」ためにnext n
と言うこともできます。例えば:
puts [1, 2, 3].map do |e|
next 42 if e == 2
e
end.inject(&:+)
これは46
をもたらします。
return
常には最も近いdef
から返され、ブロックになることはありません。周囲にdef
がない場合、return
ingはエラーです。
意図的にブロック内からreturn
を使用することは混乱を招く可能性があります。例えば:
def my_fun
[1, 2, 3].map do |e|
return "Hello." if e == 2
e
end
end
return
キーワードは内側のブロックではなく外側のdef
に関連するため、my_fun
は"Hello."
ではなく[1, "Hello.", 2]
になります。