2013-04-16 13 views
5

I Rubin Array haben, und es ist nil aber wenn ich überprüfen nil? und blank? mit es gibt falseRubin Array für null Array Überprüfung

@a = [""] 

@a.nil? 
=> false 

@a.empty? 
=> false 

Wie kann ich für die Null Bedingung, die wahr zurückgeben?

+2

'[" "]' ist _nicht_nicht. Was versuchst du zu machen? – Dogbert

+0

Ich bekomme das Array [""], wenn dieses Array kommt, dann sollte es nicht zum inneren Teil des Blocks gehen. –

+1

Tun Sie einfach 'if @a == [" "]'? – Dogbert

Antwort

20

[""] ist ein Array mit einem einzelnen Element, das ein leeres String-Objekt enthält. [].empty? wird true zurückgegeben. @a.nil? gibt false zurück, weil @a ein Array-Objekt ist, nicht nil.

Beispiele:

"".nil? # => false 
[].nil? # => false 
[""].empty? # => false 
[].empty? # => true 
[""].all? {|x| x.nil?} # => false 
[].all? {|x| x.nil?} # => true 
[].all? {|x| x.is_a? Float} # => true 
# An even more Rubyish solution 
[].all? &:nil? # => true 

Das letzte Zeile zeigt, dass [].all? wird immer return true, denn wenn ein Array dann per Definition alle Elemente leer ist (keine Elemente) jede Bedingung erfüllen.

13

In Rubin, können Sie wie überprüfen diese

[""].all? {|i| i.nil? or i == ""} 

Wenn Sie auf Schienen sind, könnten Sie

[""].all? &:blank? 
1
p defined? "" #=> "expression" 
p defined? nil #=> "nil" 

Das tun ein "" Sie als nil denken, eigentlich ein expression . Schauen Sie sich die Größe eines empty Array und non-empty Array wie unten für mehr Beweis:

p [].size #=> 0 
p [""].size #=> 1 

sagte die Ihre #nil? und #emptyfalse gibt. Was erwartet wird.