2009-10-26 2 views
6

У меня создалось впечатление, что || и or были синонимами.Разница между или и || при настройке переменных

Параметр настройки с or не имеет значения; Зачем?

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

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

завод 'как и ожидалось' с ||

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

Это раньше было для меня. –

ответ

15

or имеет нижнюю старшинства чем =.

test = nil or true 

такое же, как

(test = nil) or true 

который true, при установке test в nil.

|| имеет более высокий приоритет, чем =.

test = nil || true 

такое же, как

test = (nil || true) 

который true, при установке test в true.

+1

... поэтому мы не будем писать такой код, как это, или если бы мы это сделали, мы всегда использовали бы скобки, чтобы было ясно, что происходит. – mpen

+0

Спасибо, это имеет смысл. –

+2

Не только '||' имеет очень высокий и 'или' очень низкий приоритет, но также и 'и' и 'или' имеют * одинаковый * приоритет, тогда как' || 'и' && 'имеют разные приоритеты. В общем случае в условных выражениях всегда используются формы операторов, поскольку они имеют относительные приоритеты, которые вы на самом деле ожидаете от них. Используйте 'and' и' or' только для потока управления, где вы действительно хотите, чтобы «внутренние» выражения связывались более жестко. Что-то вроде 'test = blah.get_records или puts 'Не найдено записей.''. –

1

То же самое между and и &&. Мне когда-то нравилось это, я понял, что хотя and более читаем, чем &&, это не значит, что он всегда более подходит.

>> f = true && false 
=> false 
>> f 
=> false 
>> f = true and false 
=> false 
>> f 
=> true 
>> 
Смежные вопросы