or と || は違うのか!!

ということで、Rubyの話。


今日、バグ潰しをしてたんだけども、
思いがけずなバグがあった。


さて、問題です。
以下の実行結果は?

a = 2
b = a == 1 or a == 2
c = a == 1 || a == 2
p b.to_s + " " + c.to_s






答え:"false true"


本当なんだ。これ。


演算子の優先順位を見れば分かるんだけど
=(代入演算子)より優先度が低いのが原因。


↓括弧でくくってやれば"true true"になる。

a = 2
b = (a == 1 or a == 2)
c = a == 1 || a == 2
p b.to_s + " " + c.to_s


うーん。not,and,orを使うときは注意せねば・・・