2012-06-14 43 views

回答

52

在Ruby中,nil位于一个对象(类NilClass的单个实例)中,因此可以对其调用方法。 nil?是Ruby中的一种标准方法,可以在全部对象上调用,并返回truenil对象,false为其他任何内容。

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

blank?不是标准的Ruby方法,但是被添加到所有对象通过导轨和用于nilfalse,空,或一个空格的字符串返回true

因为empty?没有被定义为所有对象你会得到一个NoMethodError如果您在nilempty?所以要避免写东西像if x.nil? || x.empty? Rails添加的blank?方法。


回答后,我发现this question has been asked before所以你应该检查答案,这个问题了。

22

感觉它;)

无?

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

EMPTY?

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

BLANK?

[].blank? 
#=> true 
nil.blank? 
#=> true 
"".blank? 
#=> true 
" ".blank? 
#=> true 
10

任何ruby变量都是一个对象,所以它可以被单元化/取消设置(设置为nil)。如果没有初始化

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

数组,字符串nil?方法返回true,在红宝石流可以包含任何数据,因此它们可以是空的。该empty?方法返回true若然

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

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

blank?是的ActiveSupport具体方法(在任何对象可用的),并且与的ActiveSupport RubyOnRails可用。如果对象为零或空,它将返回true。

+2

'空白?'如果ActiveSupport方法 – fl00r

+0

@ fl00r是的,你是对的。我会编辑答案 – Ribtoks