协慌网

登录 贡献 社区

在 Ruby on Rails 中对 nil v。空 v。空白的简要解释

我发现自己一再寻找nil?差异的明确定义nil?blank?empty?在 Ruby on Rails 中。这是我最接近的:

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

  • nil?对象是 NilClass 的实例。

  • empty?对象是特定于类的,并且定义因类而异。如果字符串没有字符,则该字符串为空; 如果字符串不包含任何项目,则该字符串为空。

有什么遗漏,或者可以做出更严格的比较吗?

答案

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

.empty?可用于字符串,数组和散列,并在以下情况下返回 true:

  • 字符串长度 == 0
  • 数组长度 == 0
  • 哈希长度 == 0

.empty?在 nil 的东西上会抛出一个NoMethodError

那是.blank?来自。它由 Rails 实现,可以在任何对象上运行,也可以像.empty?一样工作.empty?在字符串,数组和散列上。

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

.blank?还对非空的字符串求值为 true,但只包含空格:

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

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

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

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

我用所有案例制作了这个有用的表格:

在此输入图像描述

blank?present?由 Rails 提供。

只需扩展朱利安的表格:

在此输入图像描述

参考: 空?空白?无?傻傻分不清楚