2011-01-27 8 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?メソッドが文字列のempty?メソッドでどのように機能するのか理解できません。

答えて

10

Railsは、blank?メソッドをどのように文書化しているのかちょっと難しいです。 Object#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