Ruby の or と and の優先順位

Rubyorand は優先順位がとても低いです。 例えば

x = 1 or 2

(x = 1) or 2

と解釈され

foo || bar and hoge

(foo || bar) and hoge

と解釈されます。 ちなみに次のようなコードはシンタックスエラーになります。

# syntax error, unexpected `or', expecting ')'
f(a or b)

foo || bar && hogefoo or bar and hoge の違い

さて、 ||&& 演算子では && の方が優先されます。 なので

foo || bar && hoge
foo && bar || hoge

foo || (bar && hoge)
(foo && bar) || hoge

と解釈されます。
一方で orand 演算子では『先に書いてある方』が優先されます。
なので

foo or bar and hoge
foo and bar or hoge

(foo or bar) and hoge
(foo and bar) or hoge

となります。
or and 演算子はあんまり使ったことがないんですがこのあたりの違いは知らなかった。