2016-02-29 10 views
6

Dlaczego poniższe wyrażenia rozwiązują ten problem? Nawiasy powinny mieć wyższy priorytet niż znaki nowej linii, nieprawdaż?Dlaczego nowe wiersze w nawiasach zmieniają wyniki arytmetyczne?

3 - (1 + 1) 
# => 1 

3 - (1 
    + 1) 
# => 2 

Pominięcie plus umożliwia również ekspresję ocenia się 2:

3 - (1 
     1) 
# => 2 

Jeśli oświadczam jako ciągła linia (uciekł) lub przesunąć Plus do pierwszej linii, pożądane zachowanie jest osiągnięty:

3 - (1 \ 
    + 1) 
# => 1 

3 - (1 + 
     1) 
# => 1 

Odpowiedz

5

Dzieje się tak, ponieważ Ruby rozpoznaje nową linię jako koniec wyrażenia, chyba że wyrażenie jest niekompletne. Na przykład,

(1 
+ 1) 

jest taka sama jak

(1; 
+1) 

która jest taka sama jak od +1 zwracany jest ostatnie wyrażenie w nawiasach. I to jest dalej takie samo jak 1.

Po uzyskaniu + na końcu linii wyrażenie jest niekompletne, a zatem przechodzi do następnego wiersza. To sprawia, że:

3 - (1 + 
     1) 

należy interpretować jako 3 - (1 + 1).

2

Jeśli masz kod w nawiasie, to każda linia będzie zagrożona jako oddzielna linia kodu kodu, jeśli nie zakończysz go na \ lub nie uruchomisz nowego z operatorem matematycznym.

Więc w przykładzie:

def plus_minus_if_you_understand_this_the_problem_is_solved_i_guess 
    3 - (1 
     1) 
end 

Środki mam numer 3 i chcą odjąć wyrażenie w nawiasach. W nawiasach Mam linii # 1 Numer 1 i na # 2 linii numer 1 ponownie i jak jest to ostatnia linia wypowiedzi to wrócił przez Ruby (jak w def ostatniej pozycji przed end jest zwracany celu: a.

(3 # doing nothing 
    1) # returns 1 

także Ponownie, ta część kodu zwraca 2, ponieważ jest to ostatni element w nawiasach:

(puts "hello!" 
    2) => 2 
Powiązane problemy