2010-02-11 3 views
11

Si consideri il seguente codice:Rubino - a capo e gli operatori

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

puts z 

Come ci si aspetterebbe, l'uscita è 9. Se si introduce una nuova riga:

x = 4 
y = 5 
z = y 
+ x 

puts z 

Poi uscite 5. Questo ha senso, perché è interpretato come due dichiarazioni separate (z = y e +x).

Tuttavia, non capisco come funziona quando si dispone di una nuova riga tra parentesi:

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

puts z 

L'uscita è 4. Perché?

risposta

12

(Disclaimer:.. Io non sono un programmatore di Ruby a tutto questo è solo un ipotesi)

Con parentesi, si ottiene z viene assegnato il valore di

y 
+x 

che valuta a il valore dell'ultima istruzione eseguita.

+0

+1. Stavo cercando di spiegare il concetto di base di comandi incompleti quando ho capito che l'output era 4, non 9. Good going :) – Matchu

+0

Questo ha molto senso. Venivo dallo stesso esempio in Scala dove lo tratta come z = (y + x) e le uscite 9. Buona spiegazione :-) – mopoke

+1

Le parentesi multilinea sono essenzialmente un blocco, e il valore del blocco è l'ultima dichiarazione in esso. – kejadlen

4

Terminare la riga con \ per continuare l'espressione sulla riga successiva. Questo dà l'uscita corretta:

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

uscite 9

Non so il motivo per cui il risultato è inaspettato senza sfuggire il ritorno a capo. Ho appena imparato a non farlo mai.

3

Beh, non sarà necessario il carattere fuga \ se le linee finiture con l'operatore

a = 4 
b = 5 
z = a + 
    b 

puts z 
# => 9 
+0

Io uso questa tecnica per terminare una linea con un punto se concio un insieme di metodi. –

+0

Sì, è il modo migliore per interrompere lunghe code di codice –