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

为什么Ruby中的if(a,b=[nil,nil])是真的?

  •  1
  • Nogurenn  · 技术社区  · 4 年前

    if (a,b = [nil, nil]) # <--
      true
    else
      false
    end
    

    评估为真实,而

    if (a,b = nil) # <--
      true
    else
      false
    end
    

    就像广告上说的那样是假的。

    在Ruby2.5和2.7上通过 irb . 为复制粘贴测试添加了完整的if-else语句。

    2 回复  |  直到 4 年前
        1
  •  3
  •   sepp2k    4 年前

    所以 a,b = [nil, nil] [nil, nil] ,这是真实的,因为它是一个数组,数组是真实的,而 a,b = nil nil ,这是假的。

        2
  •  2
  •   mikdiet    4 年前

    在ruby中,只有2个值是false,它们是 nil false

    所有其他值都是真值,包括零数组。

    同样,assign操作返回赋值的右边,所以

    (a,b = [nil, nil]) == [nil, nil]
    (a,b = nil) == nil