36

可能重复:
Ruby on Rails 中 nil v.empty v.blank 的简明解释

谁能告诉我nil?,blank?empty?Ruby 中的区别?

4

3 回答 3

66

在 Ruby 中,nil在一个对象(类的单个实例NilClass)中。这意味着可以在其上调用方法。nil?是 Ruby 中的一个标准方法,可以在所有对象上调用,并true为该nil对象和false其他任何东西返回。

empty?一些对象(如数组、哈希和字符串)的标准 Ruby 方法。它的确切行为将取决于特定的对象,但true如果对象不包含任何元素,它通常会返回。

blank?不是标准的 Ruby 方法,而是由 Rails添加到所有true对象并返回、nilfalse空或空白字符串。

因为empty?不是为所有对象定义的,NoMethodError如果你调用so 以避免必须编写诸如Rails 之类的东西添加方法empty?,你会得到一个。nilif x.nil? || x.empty?blank?


回答后,我发现了一个较早的问题,“如何在 Rails(和 Ruby)中理解 nil vs. empty vs. blank ”,所以你也应该检查这个答案。

于 2012-06-14T08:28:18.713 回答
29

感受一下;)

零?

nil.nil?
#=> true
[].nil?
#=> false
"".nil?
#=> false
" ".nil?
#=> false

空的?

[].empty?
#=> true
nil.empty?
#=> undefined method
"".empty?
#=> true
" ".empty?
#=> false

空白的?

[].blank?
#=> true
nil.blank?
#=> true
"".blank?
#=> true
" ".blank?
#=> true
于 2012-06-14T08:30:23.157 回答
11

任何 Ruby 变量都是一个对象,因此它可以被未初始化/取消设置(设置为 nil)。nil?如果方法未初始化,则返回 true:

b = nil
b.nil? # true
b = 'string value'
b.nil? # false

Ruby 中的数组、字符串、流不能包含数据,因此它们可以为空。如果是,则该empty?方法返回 true:

array = []
array.empty? # true
array << 5 << 4 # [5, 4]
array.empty? # false

string = "" # empty line
string.empty? # true

blank?是 Active Support 特定的方法(在任何对象中可用),并且在具有 Active Support 的 Ruby On Rails 中可用。如果对象为 nil 或为空,则返回 true。

于 2012-06-14T08:30:46.523 回答