Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between or and || when setting variables

Tags:

ruby

I was under the impression that || and or were synonymous.

Setting variable with or does not hold value; why?

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

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

Works 'as expected' with ||

>> test = nil || true
=> true
>> test
=> true
like image 327
Corban Brook Avatar asked Oct 26 '09 16:10

Corban Brook


2 Answers

Same between and and &&. I was once bited by this gotcha, then I realize that although and is more readable than &&, that does not mean it always more suitable.

>> f = true && false
=> false
>> f
=> false
>> f = true and false
=> false
>> f
=> true
>> 
like image 21
pierrotlefou Avatar answered Sep 20 '22 23:09

pierrotlefou


or has lower precedence than =.

test = nil or true

is the same as

(test = nil) or true

which is true, while setting test to nil.

|| has higher precedence than =.

test = nil || true

is the same as

test = (nil || true)

which is true, while setting test to true.

like image 160
Jonathan Feinberg Avatar answered Sep 21 '22 23:09

Jonathan Feinberg