我发现自己反复寻找nil?
差异的明确定义nil?
, blank?
,又是empty?
在 Ruby on Rails 中。这是我最近来的:
blank?
对象为假,空或空白字符串。例如, ""
, " "
, nil
, []
和{}
为空白。
nil?
对象是 NilClass 的实例。
empty?
对象是特定于类的,并且定义因类而异。如果没有字符,则字符串为空;如果不包含任何项,则数组为空。
是否缺少任何内容,或者可以进行更严格的比较?
.nil?
可以在任何对象上使用,如果对象为 nil,则为 true。
.empty?
可用于字符串,数组和哈希,如果满足以下条件,则返回 true:
正在运行.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 时:
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
对象和空对象上调用。