我发现自己在反复寻找nil?,空白?空的?在Ruby on Rails中。这是我最接近的结果:
空白的吗?对象为false、空或空白字符串。例如,"","",nil,[],{}为空。 nil ?对象是NilClass的实例。 空的吗?对象是特定于类的,定义因类而异。如果字符串没有字符,则字符串为空;如果数组不包含项,则数组为空。
是否遗漏了什么,或者可以进行更紧密的比较?
我发现自己在反复寻找nil?,空白?空的?在Ruby on Rails中。这是我最接近的结果:
空白的吗?对象为false、空或空白字符串。例如,"","",nil,[],{}为空。 nil ?对象是NilClass的实例。 空的吗?对象是特定于类的,定义因类而异。如果字符串没有字符,则字符串为空;如果数组不包含项,则数组为空。
是否遗漏了什么,或者可以进行更紧密的比较?
当前回答
虽然这个问题有n个答案,但我喜欢这里的解释方式,所以再发一个答案:-)
看看下面的数据度量——它在可用的方法中使用的各种数据类型不言自明。
参考:https://blog.appsignal.com/2018/09/11/differences-between-nil-empty-blank-and-present.html
其他回答
Rails 4
@corban-brook的“Array”的替代方案:空白?'用于检查数组是否只保存空值,可以视为空白?正确的:
[ nil, '' ].all? &:blank? == true
你还可以这样做:
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
只是关于any的一点注释?推荐:他说得对,它通常相当于!empty?。然而,任何?将返回true,返回一个只有空格的字符串(ala " ")。
当然,也可以看到上面1.9的评论。
nil ?是一个标准的Ruby方法,可以在所有对象上调用,如果对象为nil则返回true:
b = nil
b.nil? # => true
空的吗?是一个标准的Ruby方法,可以在一些对象上调用,如字符串,数组和哈希,如果这些对象不包含元素则返回true:
a = []
a.empty? # => true
b = ["2","4"]
b.empty? # => false
空的吗?不能在nil对象上调用。
空白的吗?是一个Rails方法,可以在nil对象上调用,也可以在空对象上调用。
一个特殊的情况是当试图评估一个布尔值是否为nil时:
false.present? == false
false.blank? == true
false.nil? == false
在这种情况下,建议使用。nil?
延伸朱利安的表格:
Ref: empty? blank? nil? Stupid can't tell the difference