web-dev-qa-db-ja.com

.nil?、。blank?の違いそして.empty?

可能性のある複製:
nil v。empty v。blank in Ruby on Rails の簡潔な説明)==

.nil?、。blank?、。emptyの違いを教えてください。ルビー?

どんな答えでも大歓迎です。

36
Someth Victory

Rubyでは、オブジェクト内のnil(クラスNilClassの単一インスタンス)で、メソッドを呼び出すことができます。 nil?はRubyの標準メソッドであり、allオブジェクトで呼び出すことができ、trueオブジェクトにはnilを返し、それ以外の場合はfalseを返します。

empty?は、配列、ハッシュ、文字列などのsomeオブジェクトの標準Rubyメソッドです。正確な動作は特定のオブジェクトに依存しますが、通常、オブジェクトに要素が含まれていない場合はtrueを返します。

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

empty?はすべてのオブジェクトに対して定義されていないため、NoMethodErrorempty?を呼び出した場合はnilを取得し、if x.nil? || x.empty? Railsのようなものを記述する必要がないようにblank?メソッドを追加します。


答えた後、 この質問は以前に尋ねられたことがあります であることがわかったので、その質問に対する答えも確認する必要があります。

63
mikej

それを感じる ;)

NIL?

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
25
fl00r

任意の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?はActiveSupport固有のメソッド(任意のオブジェクトで利用可能)であり、ActiveSupportを備えたRubyOnRailsで利用可能です。オブジェクトがnilまたは空の場合、trueを返します。

11
Ribtoks