ruby方法不会返回false

ruby方法不会返回false,ruby,return,Ruby,Return,我有一个方法,它返回一个数组(如果它包含任何元素)或false(如果它为nil): 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

我有一个方法,它返回一个数组(如果它包含任何元素)或false(如果它为nil):

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

即使@four数组为空,它也总是返回true。这是为什么?

在Ruby中,空数组是“truthy”。例如:

puts "foo" if []
将输出“foo”,但


不会输出任何内容。

在Ruby中,空数组是“truthy”。例如:

puts "foo" if []
将输出“foo”,但


不会输出任何内容。

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

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


当然,你也可以做一些事情,比如检查长度/大小是否为零,但我觉得询问你感兴趣的具体事情更为鲁莽。

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

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


当然,你也可以做一些事情,比如检查长度/大小是否为零,但我觉得询问你感兴趣的具体事物更为鲁比。

nil和empty不是一回事nil和empty不是一回事
puts "foo" if nil