次の変数の初期化方法に違いはありますか?
@var ||= []
@var = [] if @var.nil?
@var = @var || []
変数を初期化する方法を共有し、長所と短所を述べてください。
次の変数の初期化方法に違いはありますか?
@var ||= []
@var = [] if @var.nil?
@var = @var || []
変数を初期化する方法を共有し、長所と短所を述べてください。
@var ||= []
と@var = @var || []
等しい場合はvar
、または[]
false
nil
@var = [] if @var.nil?
より具体的です-それが等しい場合にのみに再設定さvar
れます[]
nil
警告がオンになっている場合 (そうすべきです!)、次のように@var ||= []
動作が異なり@var = @var || []
ます:
irb(main):001:0> $VERBOSE = true
=> true
irb(main):002:0> @var ||= []
=> []
irb(main):003:0> @var2 = @var2 || []
(irb):3: warning: instance variable @var2 not initialized
=> []
irb(main):004:0>
@var
が定義されているかどうかを確認したい場合で、nil
またはfalse
である場合は、次を使用できます。
@var = [] unless defined?(@var)
ただし、これはローカル変数では機能しません。Ruby では、割り当てが行われないのはなぜですか? で説明されているように。foo = true unless defined?(foo)