ruby-on-rails - Ruby on Rails 中的 nil 和 empty简短的说明

  显示原文与译文双语对照的内容

我发现自己不断地寻找 nil?blank?empty? 之间的差异。 这是我最近来过的地方:

  • blank? 对象为假,空或者空白字符串。 例如 """"nil[]{} 都是空白的。

  • nil? 对象是NilClass的实例。

  • empty? 对象是 class-specific,定义因类而异。 如果字符串没有字符,则字符串为空;如果没有任何字符,则数组为空。

有什么缺失,或者可以做更严格的比较?

时间:

.nil? 可以在任何对象上使用,如果对象为零,则为真。

.empty? 可以在字符串,数组和哈希上使用,如果:

  • 字符串长度 == 0
  • 数组长度 == 0
  • 散列长度 == 0

在nil上运行 .empty? 会引发一个 NoMethodError

所以这一步需要 .blank? 它是由 Rails 实现和将对任何对象进行操作以及工作像 .empty? 对字符串,数组和散列。


nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? 对为non-empty但只包含空格的字符串求值:


"".blank? == true
"".empty? == false

Rails 还提供了.present?,它返回 .blank?的否定。

数组疑难杂症:blank? 将返回数组的所有元素 false 即使是空白。 要确定这种情况下的空白,请使用 all?blank?,例如:


[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

一个区别是 .nil?.empty? 是由编程语言 ruby 提供的方法,而 .blank? 是web开发框架 Rails 所添加的

只需扩展表格:

enter image description here

注释:为空空白nil傻傻分不清楚

关于 any? 推荐的一点注释: 他是对的,通常它是 等价于 empty? 。! 但是,any? 会将 true 返回到只包含空格( "" )的字符串。

当然,也可以看到上面的1.9注释。

不要忘记 any?,它通常是 empty? 。! 在 Rails 中,我通常检查在语句末尾有 if something 或者 unless something的语句的存在,然后使用 blank?,因为它似乎无处不在。

在尝试评估布尔值为nil时,特殊情况是:


false.present? == false
false.blank? == true
false.nil? == false

在这种情况下,建议是使用 .nil?

#nil?

一个标准 ruby 方法可以被所有的对象上调用并返回 true 如果对象是 nil


b = nil
b.nil? # => true

#empty?

可以在某些对象如字符串,数组和哈希上调用的标准 ruby 方法,如果这些对象不包含元素,则返回 true


a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

empty? 不能在 nil 对象上调用。

#blank?

以及空 nil 对象上,可以 called. objects,一个 Rails 方法

...