2016-05-17 19 views
2

Ich arbeite durch die Ruby on Rails-Tutorial, und ich bin neugierig auf diesen Codeblock:Unterschied zwischen. Nil? und == null

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

gibt es einen Unterschied zwischen if remember_digest.nil? und if remember_digest == nil, oder ist dies nur der Autors Vorliebe?

+1

Während das Ergebnis das gleiche sein könnte, möchte ich erwähnen, dass '== nil' in Ruby ungewöhnlich ist,' nil? 'Ist ein häufigeres Ruby-Idiom. Und da 'nil'' falsey' ist, könntest du auch 'if remember_digest' schreiben (ohne weitere Methodenaufrufe) – spickermann

+0

Ich stimme @spickermann zu, es gibt auch einen tatsächlichen Unterschied' Objekt # nil? 'Antwortet einfach mit' Qfalse' und ' NilClass # nil? 'Ist die einzige Klasse, die dies mit' Qtrue' überschreibt, wobei ''=' 'tatsächlich einen Vergleich durchführt, so dass das Ergebnis, obwohl das Ergebnis dasselbe ist, eine geringere Auswirkung auf den Interpreter hat (wenn auch extrem minimal). – engineersmnky

+1

@engineersmnky 'Qfalse' und solche sind wirklich nur relevant als C Internals. 'NilClass' ('nil') und' FalseClass' ('false') sind ihre tatsächlichen Darstellungen in Ruby. – tadman

Antwort

2

Kein Unterschied. Gemäß docs antwortet nur nil Objekt true zu nil?.

+0

Der einzige wahre Unterschied (s) zu mir ist '. NIL?' Ist sauberer, lesbarer und erfordert weniger Eingabe :) –

Verwandte Themen