Ruby の or と and の優先順位
Ruby の or
と and
は優先順位がとても低いです。
例えば
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 && hoge
と foo or bar and hoge
の違い
さて、 ||
と &&
演算子では &&
の方が優先されます。
なので
foo || bar && hoge foo && bar || hoge
は
foo || (bar && hoge) (foo && bar) || hoge
と解釈されます。
一方で or
と and
演算子では『先に書いてある方』が優先されます。
なので
foo or bar and hoge foo and bar or hoge
は
(foo or bar) and hoge (foo and bar) or hoge
となります。
or
and
演算子はあんまり使ったことがないんですがこのあたりの違いは知らなかった。