読者です 読者をやめる 読者になる 読者になる

sachin21's blog

技術メモブログ

あまり知られてないRubyのコンパイルの仕様について

こんにちは、@sachin21です。

if nil
  # 実行されない
  foo = "hoge"
  p foo
else
  # 変数宣言せずに変数の中身を`p`する
  p foo
end

これでエラーが出ないのはなぜなのか?

宣言されてないはずのfoop fooで表示されないはず

でもそうではない

=> nil

「ローカル変数fooを宣言してるお!!」というのはRubyに認識されてしまうのです。。

そしてローカル変数のデフォルトの値としてnilで初期化される。

だからelse句内は間違って正常に実行されてしまう。

この動いてはいけないものが動いてしまうのはちと怖いっすね。。