読者です 読者をやめる 読者になる 読者になる

「<<」演算子は条件演算子よりも優先順位が高い

Ruby

「<<」演算子はArrayクラスに対して要素を追加する時によく使う。自分の頭の中では要素の代入を行う「=」演算子とセットで認識されていたので、次のようなコードを書いて30分くらいプチハマりした。

flag_1 = true
flag_2 = true
flag_3 = false

mylist = []
mylist << flag_1 ? 1 : 0
mylist << flag_2 ? 1 : 0
mylist << flag_3 ? 1 : 0

p mylist
# => [true, true, false]

# 本当は↓のようになってほしかった
# => [1, 1, 0]

「<<」演算子が条件演算子よりも優先順位が高いため、「(mylist << flag1) ? 1 : 0」のような結合をしてしまったというわけ。

ちなみに代入演算子で代入を行うときは想定通りの結果になる。代入演算子は条件演算子よりも優先順位が低いためだ。

参考 : 演算子式 - Rubyリファレンスマニュアル