2011-01-27 84 views
7

Rails docs有這個信息Object#blank?Rails對象#空白?與String#空?混亂

一個目的是空白的,如果它是假的,空的,或空白字符串。例如,「」,「」,nil,[]和{}爲空。

但該方法的來源是這樣的:

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 12 
def blank? 
    respond_to?(:empty?) ? empty? : !self 
end 

現在,當我睜開方便的小命令行,然後鍵入ruby -e 'p " ".empty?'返回false。這意味着Rails應該說這顯然不是一個空白值。但!我打開我的rails console,然後輸入" ".empty?,並像我早期的直線命令行一樣僞造。但是,我輸入「」.blank?而且我像Rails承諾的那樣真實。

我在理解Rails的blank?方法如何與String的方法一起使用時缺少什麼?

回答

10

Rails在如何記錄其blank?方法方面有點棘手。儘管Object#blank?聲稱還檢測到空白字符串,但它是通過String#blank?來處理空白字符串和Object#blank?來實現的。 (blank?定義的幾個其他類,也節省時間。)

activesupport/lib/active_support/core_ext/object/blank.rb, line 66

class String 
    def blank? 
    self !~ /\S/ 
    end 
end 
+0

啊,謝謝!只要SO會讓我,我會標記你的答案。 – jxpx777 2011-01-27 17:55:09