7

パラメータがnilでないかどうかを確認する方法をいくつか知っています

if param[:some_value]
if param[:some_value].present?
if !param[:some_value].nil?    #unless param[:some_value].nil? 
if !param[:some_value].blank?  #unless param[:some_value].blank? 

どれが正しく、最も人気がありますか? それらの違いは何ですか?if param[:some_value]最もシンプルで短いので、むしろ使用したいと思います。

4

4 に答える 4

15

との違いを次に示しnil?ます。blank?present?

>> "".nil?
=> false
>> "".blank?
=> true
>> "".present?
=> false
>> " ".nil?
=> false
>> " ".blank?
=> true
>> " ".present?
=> false

present?に変換されることに注意してくださいnot nil and not blank。whilenil?は Ruby が提供するものでblank?ありpresent?、Rails が提供するヘルパーです。

それで、どれを選ぶべきですか?もちろん、それはあなたが望むものに依存しますが、params[:some_value] を評価するときは、通常、それが nil でないことだけでなく、空の文字列であるかどうかも確認する必要があります。これらは両方とも でカバーされていpresent?ます。

于 2012-08-19T09:51:19.907 に答える
3

関連するケースは次のとおりです。

  1. ハッシュにキー (およびその値) がありません
  2. ハッシュにはnilキーの値があります
  3. ハッシュには、キーの値が空の文字列 ( "") または空の配列 ( []) があります
  4. ハッシュには、キーの他の値があります

線を引く場所に応じて、適切な方法を使用してください。

  • 1 対 2、3、4:!param.key?(:some_value)
  • 1、2 対 3、4:param[:some_value].nil?
  • 1、2、3 対 4:param[:some_value].blank?
  • 2、3、4 対 1:param.key?(:some_value)
  • 3、4 対 1、2:param[:some_value]
  • 4 対 1、2、3:param[:some_value].present?
于 2012-08-19T12:30:37.670 に答える
2

if param[:some_value]最も一般的なものです。

ただし、ブール データ ( true、 ) を使用している場合、次の理由falseにより、最適な方法は になります。if !param[:some_value].nil?

>> hash = {foo:false, bar:nil}

>> !! hash[:foo]
=> false
>> !! hash[:bar]
=> false

>> !! !hash[:foo].nil?
=> true
>> !! !hash[:bar].nil?
=> false

( !!if ステートメントでテストされるブール値を返します)

また、値が本当にゼロかどうか、またはキーと値の組み合わせが定義されていないかどうかをテストすることも重要です。key?(key)あなたのためにそれを行います。

>> hash ={foo:nil}

>> hash[:foo]
=> nil
>> hash[:not_there]
=> nil

>> hash.key?(:foo)
=> true
>> hash.key?(:not_there)
=> false
于 2012-08-19T18:36:32.660 に答える
1

何をしたいかによって異なりますが、私は通常、次の形式を使用します。

if param[:some_value]
  ...
end

# and
param[:some_value] && something
# or
param[:some_value] || somethinn

もちろん、それらはすべて、パラメーターを にできない場合にのみ機能しますfalse。その場合、私はunless param[:some_value].nil?バージョンを選びます。

于 2012-08-19T07:51:03.147 に答える