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

时间:2010-09-06 06:22:49

标签: ruby variables initialization memoization

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

@var ||= []
@var = [] if @var.nil?
@var = @var || []

请分享初始化变量的方式并说明专业人员缺点

2 个答案:

答案 0 :(得分:5)

@var ||= []@var = @var || []相等,如果它是var[]

,它会将false设置为nil

@var = [] if @var.nil?更具体 - 仅当var等于[]

时,才会将nil重新设置为{{1}}

答案 1 :(得分: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>

如果您想检查@var是否已定义,如果是nilfalse,您会感到满意,可以使用

@var = [] unless defined?(@var)

这不适用于局部变量,如In Ruby why won't foo = true unless defined?(foo) make the assignment?

中所述