[#46732] ヒアドキュメント内の変数展開が正常に行われない — ShingoKintaka <kamuycikap@...>

Ruby  :1.8.7 (Ubuntu9.10)

12 messages 2010/01/05
[#46733] Re: ヒアドキュメント内の変数展開が正常に行われない — rubikitch@... 2010/01/06

From: ShingoKintaka <kamuycikap@tulip.ocn.ne.jp>

[#46800] DLモジュールの使い方 — kouichi_someya@...

染谷と申します。

12 messages 2010/01/20
[#47678] プログラム実行時に「[BUG] Segmentation fault」 — 染谷 康一 <kouichi_someya@...> 2010/12/09

染谷と申します。

[ruby-list:46820] 整数が格納された二変数を一つの式でスワップするコードのふるまいについて

From: m_takao <threewayhandshake@...>
Date: 2010-01-27 19:02:37 UTC
List: ruby-list #46820
こんばんは。
日本電子専門学校OSS科の高尾と申します。

Rubyに特別な話ではないのですが、ここが最も投稿しやすそうなので
こちらで質問をさせて頂きます。

昔、整数が格納された二変数を一時変数を使わずにスワップするという
賢いコードのことを知りました。

a = a ^ b
b = a ^ b
a = a ^ b

このコードはCでもPHPでも、JavaでもRubyでもきちんと動きました。
(例えばa=1, b=2のとき実行するとa=2, b=1となる)
ところが、これを一つの式にまとめて

a = a ^ (b = (a = a ^ b) ^ b)

と書いたものは、JavaやRubyでは期待したようには動きませんでした。
(例えばa=1, b=2のとき実行するとa=0, b=1となる)
一方CやPHPでは期待通りに動きました。

目で追う分には同じ処理のように思えるのですが
なぜJavaやRubyでは前者/後者で違う結果になってしまうのでしょうか?

In This Thread

Prev Next