如何理解Ruby中的nil、empty和blank

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

发表评论