以下变量的初始化方式有区别吗?
@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
or false
,您可以使用
@var = [] unless defined?(@var)
但是,这不适用于局部变量,正如在 Ruby 中为什么不foo = true unless defined?(foo)
进行赋值?