0

我有一个方法,它返回一个数组(如果它包含任何元素),如果它是 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

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

4

2 回答 2

3

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

要检查数组在哪里是空的,你可以调用empty?或者如果你真的想检查它是否不为空,你也可以使用any?.

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

于 2013-02-22T16:12:08.650 回答
0

在 Ruby 中,空数组是“真实的”。例如:

puts "foo" if []

将输出“foo”但是

puts "foo" if nil

不会输出任何东西。

于 2013-02-22T16:11:38.697 回答