修飾子の優先順位
if修飾子とrescue修飾子を両方つけるとどうなるか、という話。以下のコードを実行すると、
puts "aaa" if true rescue puts "xxx" puts "bbb" if false rescue puts "xxx" raise "aaa" if true rescue puts "xxx" raise "bbb" if false rescue puts "xxx" puts "aaa" rescue puts "xxx" if true puts "bbb" rescue puts "xxx" if false raise "aaa" rescue puts "xxx" if true raise "bbb" rescue puts "xxx" if false
次の結果になります。
aaa xxx aaa xxx
どうも、並び順ではなく優先順位的なものがあってそれにしたがって評価されるみたいですね。で、「if > rescue」と。また、「()」で順番を変更することも可能なようです。
puts "aaa" rescue ( puts "xxx" if true ) puts "bbb" rescue ( puts "xxx" if false ) raise "aaa" rescue ( puts "xxx" if true ) raise "bbb" rescue ( puts "xxx" if false )
実行結果です。
aaa bbb xxx
ふむ。