5

$!グローバル変数が最新の例外オブジェクトを保持していることは知っていますが、以下の構文に混乱しています。次の構文を理解するのを手伝ってくれる人はいますか?

 rescue $!
4

1 に答える 1

9

このコンストラクトは、例外がプログラムを停止してスタック トレースをバブルアップするのを防ぎます。また、その例外を値として返すので、便利です。

a = get_me_data rescue $!

この行の後、a要求されたデータまたは例外のいずれかが保持されます。その後、その例外を分析し、それに応じて行動できます。

def get_me_data
  raise 'No data for you'
end

a = get_me_data rescue $!
puts "Execution carries on"

p a
# >> Execution carries on
# >> #<RuntimeError: No data for you>

より現実的な例

lines = File.readlines(filename) rescue $!

行またはエラーが表示されます (ファイルが存在しない場合、権限がないなど)。いずれにせよ、実行は停止しません。

于 2013-02-09T10:49:54.993 に答える