10月 242014
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"