посмотреть здесь
2 and 7
#=> 7
2 or 7
#=> 2
2 or 7 and 12
#=> 12
2 or 7 or 12
#=> 2
2 or 7 and 12 or 10
#=> 12
true and true and false
#=> false
true or true or false
#=> true
true and true or false
#=> true
true or true and false
#=> false
true or true and false and true
#=> false
Резюме:
(а), когда вы будете использовать в выражении только and
оператора значение выражения всегда последний операнд и обратное верно для выражения, имеющего только or
operator.In Boolean будет вычисляться полное выражение.
(б) Если выражение будет иметь and
и or
смешанный, оценка будет продолжаться до последнего and
и его ROH
операнда будет значение выражения (в случае Boolean
последнего and
RHO, LHO будет оцениваться ., после этого результата будет производиться, как правило операции булевой
Применяя правило (б)
ниже код работает:
if true or true and false then
puts "Quux"
end
#=> nil
a = true or true and false
#=> false
if a then
puts "Foo"
end
#Foo
#=> nil
Ниже кода выводит Foo
из-за приоритета =
над and
, or
.
Выражение a = true or true and false
вычисляется по следующей схеме применения правила (б)
a = true or true and false
||
(a = true) or true and false
||
true and false
||
false
Еще одно хорошее применение правила (б)
if 2 and 3 or nil
p "hi"
end
#=> "hi"
if 2 or 3 and nil
p "hello"
end
#nothing printed
Отличное объяснение, спасибо! – Adrien