Rubyでの実行されない宣言
((false)? a=123 : nil)
この後のaの値が気になる。
実際にやってみた。
irb(main):001:0> ((false)? a=123 : nil) => nil irb(main):002:0> a => nil
nil
が代入されていた。
それならif
はどうなるのか、
irb(main):003:0> if(false); b=123; end => nil irb(main):004:0> b => nil
これもnil
が代入されていた。
もうひとつ
irb(main):001:0> a=123 if false => nil irb(main):002:0> a => nil
これを使って、
def f(a, b) ((!a.nil?)? (a_is_not_nil = true; a) : "")+ ((!b.nil?)? ((a_is_not_nil)? ", " : "")+b : "") end p f("a", "b") p f("a", nil) p f(nil, "b") p f(nil, nil)
"a, b" "a" "b" ""
こんな風にできる。
宣言は、例え実行されなくても宣言とみなされます。
v = 1 if false # 代入は行われないが宣言は有効 p defined?(v) # => "local-variable" p v # => nil