2012-06-14 45 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