Ruby on Rails 中的 nil v.empty v.blank 的简要说明

我发现自己反复寻找nil?差异的明确定义nil?blank? ,又是empty?在 Ruby on Rails 中。这是我最近来的:

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

  • nil?对象是 NilClass 的实例。

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

是否缺少任何内容,或者可以进行更严格的比较?

答案

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

.empty?可用于字符串,数组和哈希,如果满足以下条件,则返回 true:

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

正在运行.empty?在 nil 上,将抛出NoMethodError

那是.blank?在哪里.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?使用all? blank? , 例如:

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

在所有情况下,我都制作了这个有用的表:

在此处输入图片说明

blank?present?由 Rails 提供。

只需扩展朱利安的表:

在此处输入图片说明

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

快速提示: !obj.blank? == obj.present?

在某些表情中可以方便 / 轻松

一个不同是.nil?.empty?是由编程语言 Ruby 提供的方法,而.blank?是 Web 开发框架 Rails 添加的东西。

在此处输入图片说明

  • 一切都是nil?blank?
  • 一切都是empty?blank?
  • 没有什么是empty?nil?
  • 没有什么是nil?empty?

tl; dr - 仅使用blank?present?除非您想区分""" "

一种特殊情况是当尝试评估布尔值是否为 nil 时:

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

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

只是一点点的笔记any?建议:他是对的,它通常等效于!empty? 。但是, any?将返回true到只包含空格的字符串(ala " " )。

当然,也请参见上面的 1.9 注释。

别忘了any?通常哪个是!empty? 。在 Rails 中,我通常在语句末尾检查是否存在某些东西, if something或者unless something if something话使用blank?因为它似乎无处不在,所以需要它。

nil?是可以在所有对象上调用的标准 Ruby 方法,如果对象为nil ,则返回true

b = nil
b.nil? # => true

empty?是一个标准的 Ruby 方法,可以在某些对象(例如字符串,数组和哈希)上调用,如果这些对象不包含任何元素,则返回true

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

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

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

blank?是一个 Rails 方法,可以在nil对象和空对象上调用。