2011-09-17 3 views

Répondre

4

Il dit:

  1. moins n'est pas réglé en cours (la dernière à moins)
  2. ne rien faire et revenir @current_user si @current_user est déjà défini (la partie ||=)
  3. appeler autrement la méthode/helper login_from_session et affecter le résultat à @current_user
  4. sinon si l'appel précédent est retourné nil ou false, appelez la méthode/aide login_from_cookie et affecter le résultat à @current_user
  5. en tout cas retourner la valeur de @current_user variable d'instance

Il 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

Combiner toutes ces règles et vous avez expliqué la méthode.
@a ||= some_value 
# is equivalent to 
if [email protected] 
    @a = some_value 
end 

Questions connexes