代码之家  ›  专栏  ›  技术社区  ›  PeterWong

如何在Ruby中初始化变量?

  •  13
  • PeterWong  · 技术社区  · 14 年前

    以下初始化变量的方法有什么不同吗?

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

    请分享初始化变量的方法,并说明优点和缺点。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Andrew Grimm atk    14 年前

    @var ||= [] @var = @var || [] 等于它将设置的 var [] 如果是 false nil

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

        2
  •  5
  •   Community Jaime Torres    7 年前

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

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