Dans Ruby (et dans de nombreuses autres langues), de nombreuses valeurs sont évaluées à true
dans un contexte booléen, et une poignée est évaluée à false. Dans Ruby, the only two things that evaluate to false
are false
(itself) and nil
.
Si vous annulez quelque chose, cela force un contexte booléen. Bien sûr, cela le nie aussi. Si vous le doublez, il force le contexte booléen, mais renvoie la valeur booléenne appropriée.
Par exemple:
"hello" #-> this is a string; it is not in a boolean context
!"hello" #-> this is a string that is forced into a boolean
# context (true), and then negated (false)
!!"hello" #-> this is a string that is forced into a boolean
# context (true), and then negated (false), and then
# negated again (true)
!!nil #-> this is a false-y value that is forced into a boolean
# context (false), and then negated (true), and then
# negated again (false)
Dans votre exemple, la méthode signed_in?
doit renvoyer une valeur booléenne (comme indiqué par convention par le caractère ?
). La logique interne utilisée pour déterminer cette valeur est en vérifiant si la variable current_user
est définie. Si elle est définie, elle évaluera true
dans un contexte booléen. Sinon, il sera évalué comme faux. La double négation force la valeur de retour à être un booléen.
Avez-vous regardé des questions qui vous ont été données après que vous ayez tapé le titre de votre question? – Nakilon
Oui, il n'y avait rien là. J'ai effectivement trouvé une question similaire m'expliquant la deuxième question, mais j'ai dû chercher par "double bang" qui n'est pas si évident que vous pourriez le penser. – Vitaly
Oui, l'algorithme des questions similaires est facilement manipulé lorsque des parties importantes du titre sont des caractères de ponctuation. – pkaeding