強調したいのは、Ruby 1.9.3 インタープリターによってオペレーターが実際にどのように展開されるかを探していることであり、その振る舞いに基づいてどのように展開されるかではありません。私が本当に望んでいるのは、実際のインタープリターのソースを理解した人です。この質問を調べているように見える唯一のリソースは古くなっています: " A short-circuit (||=) edge case ".||=
上記のリソースは、 1.9 より前のバージョンのインタープリターではx ||= y
toの「公式」展開がx = x || y
不正確であるか、バグが多かったことを示唆しているようです。いずれにせよ、示されているエッジ ケースは平滑化されているようです。上記のリソースは、x || x = y
またはx or x = y
「より正確」であると主張しています。x
ただし、 が以前に宣言されていないグローバル変数である場合は機能しないため、どちらも正しくありません。
[11:04:18][****@asha:~]$ irb
1.9.3-p194 :001 > a || a = 3
NameError: undefined local variable or method `a' for main:Object
1.9.3-p194 :002 > b or b = 3
NameError: undefined local variable or method `b' for main:Object
1.9.3-p194 :003 > c = c || 3
=> 3
したがって、少なくとも 1.9.3 では、これらの例に関する限り、x = x || y
展開は正しいように見えます。しかし、私の最初のポイントを繰り返しますが、私 (および他の人) が行ったように逸話的にではなく、信頼できる情報源がこの問題を解決してくれることを本当に望んでいます。