変数が定義されているか確認する defined?
を利用した際、思わぬ挙動をしたのでメモ。
事象
以下は期待通りの挙動ですが、
defined? a # => nil
三項演算子を利用したときに、expression
が返却されてしまいました。
defined? a ? a : nil # => "expression"
原因:カッコ省略でメソッド適用範囲が意図と違ってしまった
原因はカッコを省略したことにより、defined?
が意図しない範囲にかかってしまったためでした。
defined? a ? a : nil # => "expression"
defined?(a ? a : nil) # => "expression"
defined?(a) ? a : nil # => nil
結論:defined?を三項演算子で使うときはカッコを省略しない
defined?
に限らず、カッコを省略した場合の挙動をきちんと理解して利用しないといけないですね。
defined?(a) ? a : nil # => nil