在Ruby on Rails中对nil v. empty v. blank的简明解释

我发现自己反复在寻找Ruby on Rails中 "nil"、"blank "和 "empty "的区别的明确定义。 这是我最接近的一次。

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

  • nil?对象是NilClass的实例。

  • empty?对象是特定于类的,其定义因类而异。一个字符串如果没有字符就是空的,一个数组如果不包含任何项目就是空的。

是否有什么遗漏,或者可以做一个更严格的比较?

解决办法

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

.empty?可以在字符串、数组和哈希上使用,如果是,则返回true。

  • 字符串长度==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?在非空但只包含空白的字符串上也会评估为真。

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

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

数组问题:blank?会返回false,即使数组中的*个元素都是空白。在这种情况下要确定空白,请使用all?blank?,例如。

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 
评论(12)

一个区别是,.nil?.empty?是编程语言Ruby提供的方法,而.blank?是网络开发框架Rails添加的东西。

评论(0)

不要忘记any?,它通常是!empty?。在Rails中,我通常用if somethingunless something在语句的结尾处检查是否有东西存在,然后在需要时使用blank?,因为它似乎在任何地方都有效。

评论(2)