我发现自己反复寻找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',]空白?==错误的
[零,,]全部&;:空白?==符合事实的