$!
グローバル変数が最新の例外オブジェクトを保持していることは知っていますが、以下の構文に混乱しています。次の構文を理解するのを手伝ってくれる人はいますか?
rescue $!
$!
グローバル変数が最新の例外オブジェクトを保持していることは知っていますが、以下の構文に混乱しています。次の構文を理解するのを手伝ってくれる人はいますか?
rescue $!
このコンストラクトは、例外がプログラムを停止してスタック トレースをバブルアップするのを防ぎます。また、その例外を値として返すので、便利です。
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 $!
行またはエラーが表示されます (ファイルが存在しない場合、権限がないなど)。いずれにせよ、実行は停止しません。