Ruby on Rails中nil v。empty v。blank的简要解释

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

  • blank?对象是假的,空的或空白字符串。例如""" "nil[],和{}都是空白。
  • nil? 对象是NilClass的实例。
  • empty?对象是特定于类的,并且定义因类而异。如果没有字符,则字符串为空;如果数组不包含任何项目,则该数组为空。

有什么缺失或可以进行更紧密的比较?


.nil? 可用于任何对象,如果对象为零,则为true。

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

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

运行.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?

数组gotcha:即使数组的所有元素都是空白blank?也会返回。为了确定在这种情况下空白,使用与,例如:falseall?blank?

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

我用所有情况制作了这个有用的表格:



Ref:empty?blank?nil?傻傻分不清楚

小建议: !obj.blank? == obj.present?

在某些表情中,对眼睛可以很方便/容易

添加评论

友情链接:蝴蝶教程