2010-02-11 73 views
11

Considere el siguiente código:Ruby - saltos de línea y los operadores

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

puts z 

Como era de esperar, la salida es 9. Si se introduce una nueva línea:

x = 4 
y = 5 
z = y 
+ x 

puts z 

A continuación se da salida a 5. Esto tiene sentido, porque se interpreta como dos instrucciones separadas (z = y y +x).

Sin embargo, no entiendo cómo funciona cuando se tiene una nueva línea entre paréntesis:

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

puts z 

La salida es 4. ¿Por qué?

Respuesta

12

(Negación:.. No soy un programador de Ruby en todo esto es sólo una suposición)

Con parens, se obtiene z se le asigna el valor de

y 
+x 

que será evaluado el valor de la última instrucción ejecutada.

+0

+1. Estaba tratando de explicar el concepto básico de comandos sin terminar cuando me di cuenta de que la salida era 4, no 9. Buena idea :) – Matchu

+0

Eso tiene mucho sentido. Venía del mismo ejemplo en Scala donde lo trata como z = (y + x) y muestra 9. Buena explicación :-) – mopoke

+1

Los paréntesis de líneas múltiples son esencialmente un bloque, y el valor del bloque es la última instrucción en él. – kejadlen

4

Finalice la línea con \ para continuar la expresión en la siguiente línea. Esto le da a la salida correcta:

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

salidas 9

No sé por qué el resultado es inesperado y sin escapar de la nueva línea. Acabo de aprender a nunca hacer eso.

3

Bueno, no necesitarán el carácter escape \ si sus líneas termina con el operador

a = 4 
b = 5 
z = a + 
    b 

puts z 
# => 9 
+0

Utilizo esta técnica para terminar una línea con un punto si estoy encadenando un montón de métodos. –

+0

Sí, es la mejor manera de romper largas líneas de código –

Cuestiones relacionadas