2013-02-22 94 views
0

我有方法,它返回任一的陣列(如果它包含任何元素)或假如果它是零:紅寶石方法不會返回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

零和空是不一樣的東西 – 2013-02-22 16:09:26

回答

3

您正在檢查數組是否爲零(即,是單個實例NilClass),這與檢查數組是否爲空是非常不同的。

要檢查數組的位置是否爲空,您可以撥打電話empty?,或者如果您確實要檢查其是否爲空,則還可以使用any?

你當然也可以做這樣的事情檢查長度/大小爲零,但感覺更rubyish我來問你有興趣在具體的事情。

0

Ruby中的空數組是'truthy'。例如:

puts "foo" if [] 

將輸出 「富」,但

puts "foo" if nil 

不會輸出任何東西。