我有方法,它返回一个数组(如果它包含任何元素)或者如果它是nil则返回false:
def check_for_four
@four = []
check_values.each do |key, value| ###check_values return hash with key and values as numbers
@four << key if value == 4
end
if @four == nil
return false
else
return @four
end
end
但稍后,如果我调用方法
if some_object.check_for_four
puts "true"
else
puts "false"
end
即使@four数组为空,它也总是返回true。那是为什么?
答案 0 :(得分:3)
您正在检查数组是否为nil(即NilClass
的单例实例),这与检查数组是否为空非常不同。
要检查数组为空的位置,您可以调用empty?
,或者如果您确实要检查它是否为空,也可以使用any?
。
你当然也可以做一些检查长度/大小为零的事情,但是对于我来说,要求你感兴趣的具体事情让我觉得更加红润。
答案 1 :(得分:0)
Ruby中的空数组是'truthy'。例如:
puts "foo" if []
将输出“foo”但
puts "foo" if nil
不会输出任何内容。