2009-10-26 9 views
6

Miałem wrażenie, że || i or były synonimami.Różnica między lub i || podczas ustawiania zmiennych

Zmienna ustawień z or nie zawiera wartości; czemu?

>> test = nil or true 
=> true 
>> test 
=> nil 

>> test = false or true 
=> true 
>> test 
=> false 

działa 'zgodnie z oczekiwaniami' z ||

>> test = nil || true 
=> true 
>> test 
=> true 
+0

To było dla mnie zajęcie. –

Odpowiedz

15

or ma niższy pierwszeństwo niż =. podczas ustawiania test do nil

test = nil or true 

jest taka sama jak

(test = nil) or true 

który true,.

|| ma wyższy priorytet niż =. podczas ustawiania test do true

test = nil || true 

jest taka sama jak

test = (nil || true) 

który true,.

+1

... dlatego nie napisalibyśmy takiego kodu, lub gdybyśmy to zrobili, zawsze użylibyśmy nawiasów, by wyjaśnić, co się dzieje. – mpen

+0

Dziękuję, to ma sens. –

+2

"||" ma nie tylko bardzo wysoki i "lub" bardzo niski priorytet, ale także 'i' oraz 'lub' mają ten sam * precedens, podczas gdy '||' i '&&' mają różne priorytety. Ogólnie rzecz biorąc, w wyrażeniach warunkowych zawsze używaj formularzy operatora, ponieważ mają one względne priorytety, których faktycznie oczekujesz. Używaj 'i' oraz' lub 'tylko do sterowania przepływem, gdzie * chcesz * wyrażeń" wewnętrznych ", aby wiązać mocniej. Coś jak 'test = blah.get_records lub puts 'Nie znaleziono rekordów.". –

1

To samo między and i &&. Byłem kiedyś gryziony przez to gówno, potem zdaję sobie sprawę, że chociaż and jest bardziej czytelny niż &&, to nie znaczy, że zawsze będzie bardziej odpowiedni.

>> f = true && false 
=> false 
>> f 
=> false 
>> f = true and false 
=> false 
>> f 
=> true 
>> 
Powiązane problemy