2010-02-11 6 views
11
les nouvelles lignes

Considérez le code suivant:Ruby - et les opérateurs

x = 4 
y = 5 
z = (y + x) 

puts z 

Comme on pouvait s'y attendre, la sortie est 9. Si vous introduisez une nouvelle ligne:

x = 4 
y = 5 
z = y 
+ x 

puts z 

Ensuite, sorties 5. Cela est logique, car il est interprété comme deux instructions distinctes (z = y et +x).

Cependant, je ne comprends pas comment cela fonctionne: lorsque vous avez une nouvelle ligne entre parenthèses:

x = 4 
y = 5 
z = (y 
+ x) 

puts z 

La sortie est 4. Pourquoi?

Répondre

12

(non-responsabilité:.. Je ne suis pas un programmeur Ruby à tout cela est juste une supposition sauvage)

Avec parens, vous obtenez z étant affecté la valeur de

y 
+x 

qui évalue à la valeur de la dernière instruction exécutée.

+0

+1. J'essayais d'expliquer le concept de base des commandes inachevées quand je me suis rendu compte que la sortie était de 4, pas de 9. Bon départ :) – Matchu

+0

Cela fait beaucoup de sens. Je venais du même exemple dans Scala où il le traite comme z = (y + x) et sort 9. Bonne explication :-) – mopoke

+1

Les parenthèses multilignes sont essentiellement un bloc, et la valeur du bloc est la dernière instruction qui s'y trouve. – kejadlen

4

Terminez la ligne avec \ afin de continuer l'expression sur la ligne suivante. Cela donne la sortie appropriée:

x = 4 
y = 5 
z = (y \ 
    + x) 
puts z 

9 sorties

Je ne sais pas pourquoi le résultat est inattendu, sans échapper à la nouvelle ligne. Je viens d'apprendre à ne jamais faire ça.

3

Eh bien, vous aurez pas besoin du caractère échapper \ si vos lignes se termine par l'opérateur

a = 4 
b = 5 
z = a + 
    b 

puts z 
# => 9 
+0

J'utilise cette technique pour terminer une ligne avec un point si je chaîne ensemble un tas de méthodes. –

+0

Oui, est le meilleur moyen de casser de longues lignes de code –