我发现自己反复寻找RubyonRails中nil?、blank?和empty?之间差异的清晰定义。这是我最近的一次:
-
blank?对象为false、空或空白字符串。例如,”、”、nil、[]和{}为空 -
nil?对象是NilClass的实例 -
empty?对象是特定于类的,其定义因类而异。如果字符串没有字符,则为空;如果数组不包含任何项,则为空
有没有遗漏什么,或者可以进行更严格的比较
.nil?可用于任何对象,如果对象为nil,则为true
.empty?可用于字符串、数组和散列,并在以下情况下返回true:
- 字符串长度==0
- 数组长度==0
- 哈希长度==0
在为零的对象上运行.empty?将抛出NoMethodError
这就是.blank?的用武之地。它由Rails实现,可以对任何对象进行操作,也可以像.empty?一样对字符串、数组和散列进行操作
nil.blank?==符合事实的
false.blank?==符合事实的
[]空白?==符合事实的
{}.blank?==符合事实的
“”空白?==符合事实的
5.空白?==错误的
0.0空白?==错误的
.blank?还对非空但仅包含空格的字符串求值为true:
”。空白?==符合事实的
“”。空?==错误的
Rails还提供了.present?,它返回.blank?的否定
数组捕获:blank?将返回false,即使数组的所有元素都为空。要确定这种情况下的空白,请将all?与blank?一起使用,例如:
[nil',]空白?==错误的
[零,,]全部&;:空白?==符合事实的