||
и &&
связаны с тем приоритетом, который вы ожидаете от логических операторов в языках программирования (&&
очень сильный, ||
немного менее сильный).
and
и or
имеют меньший приоритет.
Например, в отличие от ||
, or
имеет более низкий приоритет, чем =
:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
Аналогично, в отличие от &&
, and
также имеет более низкий приоритет, чем =
:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
Более того, в отличие от &&
и ||
, and
и or
связываются с равным приоритетом:
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
Слабосвязанные and
и or
могут быть полезны для целей управления потоком: см. http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/.