defined? 1.9.1
前回 defined? の動作で理解できないことがある、と書いた。その際に使用した Ruby のバージョンは 1.8.7 だった。今回、バージョンを 1.9.1 にして試してみた。結果は 1.8.7 の場合と異なる結果になった。
CONST_HOGE = false p defined? CONST_HOGE && CONST_HOGE # => "expression" p defined?(CONST_HOGE) && CONST_HOGE # => false p defined? CONST_PIYO && CONST_PIYO # => "expression" p defined?(CONST_PIYO) && CONST_PIYO # => nil
1.8.7 の場合、3番目は nil を返したが、1.9.1 では "expression" だ。defined? は「式」を評価するので、"CONST_PIYO" は定義されてはいないが、"CONST_PIYO && CONST_PIYO" は式として正しいので "expression" が返る。うん、1.9.1 の方がしっくり来るな。