8

I have ruby array and it is nil but when I check using nil? and blank? it returns false

@a = [""]

@a.nil?
=> false

@a.empty?
=> false

How do I check for the nil condition that return true?

Charles Caldwell
  • 16,649
  • 4
  • 40
  • 47
urjit on rails
  • 1,763
  • 4
  • 19
  • 36

3 Answers3

26

[""] is an array with a single element containing an empty String object. [].empty? will return true. @a.nil? is returning false because @a is an Array object, not nil.

Examples:

"".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

That last line demonstrates that [].all? will always return true, because if an Array is empty then by definition all of its elements (no elements) fulfill every condition.

acsmith
  • 1,466
  • 11
  • 16
14

In ruby, you can check like this

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

If you are on rails, you could do

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

The one "" you are thinking as nil, actually an expression. Look at the size of an empty array and non-empty array as below for more proof:

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

Said the your #nil? and #empty gives false. Which is expected.

Arup Rakshit
  • 116,827
  • 30
  • 260
  • 317