考虑一个只有一个值nil
array = [nil]
有没有更好的方法来检查数组是否为nil
,如array.nil?
?
这有效:
array == [nil]
但是如果数组中有多个nil
值呢?
array = [nil, nil, nil]
以下是要求:
array = [1, 2] if array.nil?
array.nil?
也应该给出真实的'何时array = [nil, nil, nil]
答案 0 :(得分:3)
您可以使用Array#any?
检查数组是否包含至少一个非false
或nil
的值:
array = [1,2] unless array.any?
如果允许array
包含false
并且您只对nil
感兴趣,那么Array#any?
需要一个块:
array = [1,2] unless array.any?{|i| !i.nil?}
<强>更新强>
正如@ mu-is-short-short所暗示的那样,更好的版本是:
array = [1,2] if array.all?(&:nil?)
它完全符合您的需要:Enumerable#all?如果块返回数组所有元素的true-ish值,则返回true
。
答案 1 :(得分:2)
一种选择是统一你的阵列,然后做你已经在做的事情:
array.uniq == [nil]
因此,如果array
是任意数量的nils
,那么它就是真的。另一方面:
array.nil?
检查数组本身是否为nil
,这与包含nil
元素的数组不同。
答案 2 :(得分:0)