8

我有 ruby​​ 数组,nil但当我检查使用nil?blank?返回时false

@a = [""]

@a.nil?
=> false

@a.empty?
=> false

如何检查返回 true 的 nil 条件?

4

3 回答 3

25

[""]是一个具有单个元素的数组,其中包含一个空的 String 对象。[].empty?将返回true@a.nil?正在返回false,因为@a它是一个 Array 对象,而不是nil.

例子:

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

最后一行演示了[].all?总是返回 true,因为如果 Array 为空,那么根据定义,它的所有元素(无元素)都满足每个条件

于 2013-04-16T13:02:45.250 回答
13

在红宝石中,您可以像这样检查

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

如果你在铁轨上,你可以做

[""].all? &:blank?
于 2013-04-16T13:04:16.603 回答
1
p defined? "" #=> "expression"
p defined? nil #=> "nil"

""你认为的那个nil,实际上是一个expressionempty如下所示查看数组和数组的大小以non-empty获得更多证据:

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

说你#nil?#emptyfalse。这是预期的。

于 2013-04-16T13:13:03.280 回答