[解決済み] Rubyのブロックから抜け出すには?
2022-03-22 22:22:31
質問
以下はその例です。
Bar#do_things
:
class Bar
def do_things
Foo.some_method(x) do |x|
y = x.do_something
return y_is_bad if y.bad? # how do i tell it to stop and return do_things?
y.do_something_else
end
keep_doing_more_things
end
end
そして、こちらは
Foo#some_method
:
class Foo
def self.some_method(targets, &block)
targets.each do |target|
begin
r = yield(target)
rescue
failed << target
end
end
end
end
raiseを使うことも考えたのですが、汎用的なものにしたいので、特に何も入れずに
Foo
.
解決方法は?
キーワードを使用する
next
. 次の項目へ進みたくない場合は
break
.
いつ
next
をブロック内で使用すると、ブロックが直ちに終了してイテレータメソッドに制御が戻り、イテレータメソッドはブロックを再呼び出しして新しい反復を開始することができます。
f.each do |line| # Iterate over the lines in file f
next if line[0,1] == "#" # If this line is a comment, go to the next
puts eval(line)
end
ブロック内で使用する場合。
break
は、ブロックの外、ブロックを呼び出したイテレータの外、そしてイテレータの呼び出しに続く最初の式に制御を移します。
f.each do |line| # Iterate over the lines in file f
break if line == "quit\n" # If this break statement is executed...
puts eval(line)
end
puts "Good bye" # ...then control is transferred here
そして最後に
return
をブロックの中に入れてください。
return
は、ブロック内でどれだけ深くネストされていても、常に囲んだメソッドを返すようにします (ラムダの場合を除く)。
def find(array, target)
array.each_with_index do |element,index|
return index if (element == target) # return from find
end
nil # If we didn't find the element, return nil
end
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyのclass << selfイディオム
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】StringからIntegerへの暗黙の変換がない(TypeError)?
-
[解決済み】未定義のメソッド(NoMethodError)ruby
-
[解決済み] Rubyのメソッド'to_sym'は何をするのですか?
-
[解決済み] rubyでディレクトリからすべてのファイルを要求する最良の方法?
-
[解決済み] 文字列の文字をアルファベット順に並べるには?
-
[解決済み] gemのインストール中に "permission denied "エラーが発生するのはなぜですか?
-
[解決済み] ルビー.天井と.床
-
[解決済み] .rb(Ruby)ファイルを表示するにはどうすればよいですか?
-
[解決済み] Rubyにバイナリ検索は組み込まれていますか?
-
[解決済み] 変数が整数であるかどうかのチェック