[ruby-list:50062] Re: x ||= 1
From:
take_tk <ggb03124@...>
Date:
2015-01-16 05:21:44 UTC
List:
ruby-list #50062
たけ(tk)です > 式1 が未定義もしくは偽のとき 式1 に 式2 の評価結果を代入し > その値を全体の評価値とする。 > 式1 が真のとき,その評価結果を全体の評価値とする。 > > ということでよろしいでしょうか? 式1が定数の場合には、違います。 irb(main):041:0> X #=> NameError: uninitialized constant X irb(main):042:0> X ||= 1 #=> NameError: uninitialized constant X irb(main):043:0> X = ( X || 1 ) #=> NameError: uninitialized constant X irb(main):044:0> X || ( X = 1 ) #=> NameError: uninitialized constant X 未定義の変数や定数が代入記号の左辺に来た場合の扱いは種類によって異なる。 種類 例 未定義参照 代入文発見時(不実行) ローカル変数 x エラー nil がセットされる 定数 X エラー (未定義のまま) グローバル変数 $x nil (未定義のまま) インスタンス変数 @x nil (未定義のまま) 通常のハッシュ h[:x] nil (未定義のまま) デフォルト付きハッシュ h[:x] デフォルト値 (未定義のまま) --- 思いがけない発見。 irb(main):028:0> y #=> NameError: undefined local variable ... irb(main):029:0> y = y #=> nil ← ★!!! irb(main):030:0> y #=> nil