orと||は(優先度とか)違う演算子だという事は知ってたけど、左側がARGVかArrayかでもまた動作が違うとは思ってなかった。Rubyは難しい。


or演算子でデフォルト値をセット

Rubyで、値が無い時にデフォルト値をセットするのによくor演算子を使う。

例えばコマンドラインからの引数を取り出して、何も値が無かったらデフォルト値を使うとかあると思う。

ARGVは配列なのでこうやろうと思った

user = ARGV.shift or "shokai"

引数なしだとARGVは空配列になるから、or演算子の右側のデフォルト値が左辺に渡されると思ったけど、そんなことはなかった。


Array#shift or “default value”ってできないんだっけ?と思ってARGVじゃなくてArrayで試した。こっちはできる。


or のかわりに || を使ったら、空のARGVをshiftした時にorの右側が取り出せた。


念のため確認したけどARGVはArrayを継承してる。でもorと||で挙動が違う・・


結論

orの方が好きだけどこう書く。
arg1 = ARGV.shift || "defalut value"