创建rails项目 - Ruby on Rails中nil v。empty v。blank的简要解释




ruby配置 (10)

Rails 4

替代@ corban-brook的'Array gotcha :空白?' 用于检查数组是否只包含空值并且可以被视为空白? 真正:

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

人们也可以这样做:

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true

我发现自己反复寻找对nil?的差异的清晰定义nil?blank? ,并且是empty? 在Ruby on Rails中。 这是我最近来的:

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

  • nil? 对象是NilClass的实例。

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

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


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

tl; dr - 只使用blank?present? 除非你想区分""" "


exists? 方法可用于检查数据库中是否存在数据。 它返回truefalse布尔值。


nil? 可以用在任何物体上。 它确定对象是否有任何值,包括'空白'值。

例如:

example = nil
example.nil?  # true

"".nil?  # false

基本上nil? 只有当对象实际上等于'nil'时才会返回true。

empty? 仅在被视为集合的对象上调用。 这包括诸如字符串(字符集合),散列(键/值对集合)和数组(任意对象集合)之类的东西。 empty? 返回true是否在集合中没有项目。

例如:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

注意那是empty? 不能在nil对象上调用,因为nil对象不是集合,它会引发异常。

另请注意,即使集合中的项目是空白的,也并不意味着集合是空的。

blank? 基本上是nil?的组合nil?empty? 这对检查您认为是集合的对象很有用,但也可能为零。


一个区别是.nil?.empty? 是由Ruby编程语言提供的方法,而.blank? 是由Web开发框架Rails added的。


不要忘记any? 这通常是!empty? 。 在Rails中,我通常会在语句结尾处检查是否存在某些if something或者unless something使用blank? 因为它似乎在任何地方都有效。


只是关于any?一个小记录any? 推荐:他是对的,它通常相当于!empty? 。 但是, any? 将返回true的字符串只是空白(ala " " )。

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



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


特殊情况是当试图评估布尔值是否为零时:

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

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





ruby