意味不明なタイトルだけど・・・
a = foo if flag
a.blanK? 'hoge' : 'fuga'
こんな感じの書き方があり、flagがfalseだった場合エラーになるんじゃね?
って思ったらならなかったのでビックリ!
何か自分が勘違いしているのかと思って、ちょっと試してみた
[6] pry(main)> class Hoge
[6] pry(main)* def foo
[6] pry(main)* 1
[6] pry(main)* end
[6] pry(main)* def bar(flag)
[6] pry(main)* b if flag
[6] pry(main)* a = foo if flag
[6] pry(main)* p a
[6] pry(main)* p b
[6] pry(main)* end
[6] pry(main)* end
=> :bar
[7] pry(main)> Hoge.new.bar true
NameError: undefined local variable or method `b' for #<Hoge:0x007f95aba2f740>
from (pry):28:in `bar'
[8] pry(main)> Hoge.new.bar false
nil
NameError: undefined local variable or method `b' for #<Hoge:0x007f95b46ef0e0>
from (pry):31:in `bar'
やっぱ宣言されずにいきなり使った b はエラーになるよね。
なのに代入で使用した a はエラーにならない
理由がわからんけど、こんなような展開が内部的にされているのかなぁ。。。
var a;
if (flag) {
a = foo
}
全然解決してない、何の役にも立たないブログになってしまったw