2016-05-17 8 views
2

.nil?そして、私はRailsのチュートリアルにルビーを通じて働いている、と私は、このコードブロックについて興味== nilを

if remember_digest.nil? 
    false 
else 
    BCrypt::Password.new(remember_digest).is_password?(remember_token) 
end 

if remember_digest.nil?if remember_digest == nil違いがあり、またはこれは単に作者の好みですか?

+1

結果は同じですが、 '== nil'はRubyでは珍しいですが、' nil? 'はもっと一般的なRubyイディオムです。また、 'nil'は' falsey'なので、 'remember_digest'を書くこともできます(それ以上のメソッド呼び出しはありません) – spickermann

+0

@spickermannにも同意します。実際の違いは' Object#nil? 'で' Qfalse'と ' NilClass#nil? 'はこれを' Qtrue'で上書きする唯一のクラスです。 '=='は実際に比較を行いますが、結果は同じですが、前者はインタプリタにはあまり影響しません。 – engineersmnky

+1

@engineersmnky 'Qfalse'などは実際にはCの内部構造としてのみ関連しています。 'NilClass'(' nil')と 'FalseClass'(' false')は実際のRuby表現です。 – tadman

答えて

2

違いはありません。 docsによれば、nilオブジェクトのみがtrue~nil?に応答する。

+0

私にとって唯一の真の違いは、 '.nil?'がよりクリーンで、読みやすく、タイピングが少ないことです。 –

関連する問題