Confus par cette méthode - quelqu'un peut-il m'expliquer s'il vous plaît?Ruby - pouvez-vous me dire ce qui se passe ici
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
Confus par cette méthode - quelqu'un peut-il m'expliquer s'il vous plaît?Ruby - pouvez-vous me dire ce qui se passe ici
def current_user
@current_user ||= (login_from_session || login_from_cookie) unless @current_user == false
end
Il dit:
@current_user
si @current_user
est déjà défini (la partie ||=
)login_from_session
et affecter le résultat à @current_user
nil
ou false
, appelez la méthode/aide login_from_cookie
et affecter le résultat à @current_user
@current_user
variable d'instanceIl pourrait être réécrite pour être plus explicite de cette manière
def current_user
if !(@current_user == false) # 1
if (@current_user)
return @current_user # 2
end
if (@current_user = login_from_session)
return @current_user # 3
end
if (@current_user = login_from_cookie)
return @current_user # 4
end
end
return @current_user # 5
end
C'est la puissance (et la beauté) de l'expressivité rubis. Rappelez-vous que Ruby ne nil
et false
est évaluée à la valeur booléenne faux dans if/else et ||
, &&
opérateurs
D'autres conseils pour mieux comprendre, en ruby vous avez les règles suivantes:
La valeur de retour d'une fonction est la dernière expression évaluée pour la fonction, de sorte
def foo
any_value
end
est le même de
def foo
return any_value
end
if/sauf si la déclaration à la fin d'une expression est le même d'un si/à moins que la déclaration, si
do something if value
est le même de
if (value)
do_something
end
L'opérateur ||=
est un raccourci pour
@a ||= some_value
# is equivalent to
if [email protected]
@a = some_value
end