2010-02-11 13 views
11

Rozważmy następujący kod:Ruby - nowe linie i operatorzy

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

puts z 

Jak można się spodziewać, wyjście jest 9. Jeśli wprowadzisz znak nowej linii:

x = 4 
y = 5 
z = y 
+ x 

puts z 

Następnie wyprowadza 5. Ma to sens, ponieważ jest interpretowane jako dwa oddzielne stwierdzenia (z = y i +x).

Ja jednak nie rozumiem, jak to działa, gdy masz przełamane w nawiasach:

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

puts z 

wyjście jest 4. Czemu?

Odpowiedz

12

(Zastrzeżenie:.. Nie jestem programista Ruby w ogóle to po prostu dziki przypuszczenie)

Z parens, masz z jest przypisana wartość

y 
+x 

rozpoznawaną wartość ostatniej wykonanej instrukcji.

+0

+1. Próbowałem wyjaśnić podstawową koncepcję niedokończonych poleceń, gdy zdałem sobie sprawę, że wynik to 4, a nie 9. Dobra robota :) – Matchu

+0

To ma wiele sensu. Pochodzę z tego samego przykładu w Scali, gdzie traktuje go jako z = (y + x) i wyjścia 9. Dobre wyjaśnienie :-) – mopoke

+1

Nawiasy wielowierszowe są w zasadzie blokami, a wartość bloku jest ostatnią z nich. – kejadlen

4

Zakończ linię za pomocą \, aby kontynuować wyrażenie w następnym wierszu. To daje właściwego wyjścia:

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

wyjść 9

nie wiem dlaczego wynik jest niespodziewany bez ucieczki przełamane. Nauczyłem się, że nigdy tego nie robić.

3

Dobrze, że nie będzie potrzebował ucieczki charakter \ jeśli linie wykończenia z operatorem

a = 4 
b = 5 
z = a + 
    b 

puts z 
# => 9 
+0

Używam tej techniki, aby zakończyć linię kropką, jeśli łączę ze sobą kilka metod. –

+0

Tak, to najlepszy sposób na przełamanie długich linii kodu –

Powiązane problemy