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

@four 配列が空の場合でも、常に true を返します。何故ですか?

4

2 に答える 2

3

NilClass配列が空かどうかをチェックするのとは大きく異なる、配列が nil (つまり、 のシングルトン インスタンス) であるかどうかをチェックしています。

配列が空である場所を確認するには、 を呼び出すempty?か、実際に空でないかどうかを確認したい場合は、 を使用することもできますany?

もちろん、長さ/サイズがゼロであることを確認することもできますが、興味のある特定のものを尋ねるのは、私にはもっとルビーに感じます.

于 2013-02-22T16:12:08.650 に答える
0

Ruby では、空の配列は「真実」です。例えば:

puts "foo" if []

「foo」を出力しますが、

puts "foo" if nil

何も出力しません。

于 2013-02-22T16:11:38.697 に答える