web-dev-qa-db-fra.com

Symboles à double tuyau dans Ruby Affectation variable?

Dupliquer possible:
qu'est-ce que signifie en rubis?) ==

Pardonnez-moi s'il s'agit d'une nouvelle question, mais je lisez un livre sur Rails Où l'auteur a utilisé cette expression dans une méthode d'assistance:

@current_user ||= User.find_by_id(session[:user_id])

Est-ce que cette utilisation de tuyaux doubles est-elle encore une boolean OR)?

Si oui, comment ça marche?

33
Daniel Upton

C'est une affectation conditionnelle. De ici :

 x = find_something() #=>nil
 x ||= "default"      #=>"default" : value of x will be replaced with "default", but only if x is nil or false
 x ||= "other"        #=>"default" : value of x is not replaced if it already is other than nil or false
56

Le code foo ||= bar Est presque équivalent à foo = foo || bar. IN Ruby= (comme dans de nombreuses langues, comme JavaScript ou io) Les opérateurs booléens sont des opérateurs de "garde". Au lieu de toujours retourner true ou false, ils évaluent à la valeur du premier opérande qui évalue à une valeur "vérité".

Par exemple, ce code foo = 1 || delete_all_files_from_my_computer() _ ne supprimera rien: FOO sera défini sur 1 Et le deuxième opérande ne sera même pas évalué.

Dans Ruby, les seules valeurs "non-vérité" sont nil et false. Donc le code foo ||= bar N'évaluera que bar _ et définir foo au résultat si foo est nil ou false .

En tant que variables d'instance par défaut sur nil lorsqu'il n'est pas défini, le code comme @foo ||= bar Est un fichier commun Ruby idiom pour définir la variable d'instance s'il n'a pas déjà été défini.

18
Phrogz