ruby方法不会返回false

时间:2013-02-22 16:08:23

标签: ruby return

我有方法,它返回一个数组(如果它包含任何元素)或者如果它是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。那是为什么?

2 个答案:

答案 0 :(得分:3)

您正在检查数组是否为nil(即NilClass的单例实例),这与检查数组是否为空非常不同。

要检查数组为空的位置,您可以调用empty?,或者如果您确实要检查它是否为空,也可以使用any?

你当然也可以做一些检查长度/大小为零的事情,但是对于我来说,要求你感兴趣的具体事情让我觉得更加红润。

答案 1 :(得分:0)

Ruby中的空数组是'truthy'。例如:

puts "foo" if []

将输出“foo”但

puts "foo" if nil

不会输出任何内容。