你如何在Ruby中初始化变量?

Pet*_*ong 13 ruby variables initialization memoization

以下几种变量初始化方法之间是否存在差异?

@var ||= []
@var = [] if @var.nil?
@var = @var || []
Run Code Online (Sandbox Code Playgroud)

请分享初始化变量的方式,并说明利弊.

fan*_*uka 5

@var ||= []并且如果它是或者@var = @var || []它将被设置var为相等[]falsenil

@var = [] if @var.nil?更具体-将重新设置var[]只有当它等于nil


And*_*imm 5

如果你有警告(你应该!),@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>
Run Code Online (Sandbox Code Playgroud)

如果你想检查是否@var定义,你会很高兴,nil或者false,你可以使用

@var = [] unless defined?(@var)
Run Code Online (Sandbox Code Playgroud)

但这不适用于局部变量,如在Ruby中所说,为什么不foo = true unless defined?(foo)进行赋值?