36

重複の可能性:
Ruby on Rails における nil v. empty v. blank の簡潔な説明

Rubynil?blank?との違いを誰か教えてもらえますか?empty?

4

3 に答える 3

66

Ruby ではnil、オブジェクト (クラスの単一のインスタンスNilClass) で。これは、メソッドを呼び出すことができることを意味します。nil?はRubyの標準メソッドで、すべてのtrueオブジェクトで呼び出すことができ、そのnilオブジェクトやその他のものに対して戻りfalseます。

empty?配列、ハッシュ、文字列などのオブジェクトに対する標準の Ruby メソッドです。その正確な動作は特定のオブジェクトによって異なりますが、通常true、オブジェクトに要素が含まれていない場合に戻ります。

blank?標準の Ruby メソッドではありませんが、 Rails によってすべてのオブジェクトに追加され、 、 、空、または空白文字列をtrue返しnilますfalse

empty?はすべてのオブジェクトに対して定義されているわけではないため、 Rails がメソッドを追加するなどの記述を避けるために、呼び出したNoMethodError場合に取得します。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 に答える