新井です。

In message "[ruby-list:38428] whenの評価の順序"
  on 25 Sep 2003 12:37:26 +0900,
  URA Takefumi <hage / power.email.ne.jp> wrote:
> 浦です。

> 以下のような場合、'a'と印字されることが保証されているのかどうかというこ
> とです。ふと気づいて、気になって仕方なくなりました。FAQなりリファレンス
> マニュアルなりに記述がありそうなもんですが、なかったもので。

書きましょう。ただ、

| つまり、
| 
| case 式0
| when 式1, 式2
|   stmt1
| when 式3, 式4
|   stmt2
| else
|   stmt3
| end
| 
| は以下の if 式とほぼ等価です。
| 
| _tmp = 式0
| if 式1 === _tmp or 式2 === _tmp
|   stmt1
| elsif 式3 === _tmp or 式4 === _tmp
|   stmt2
| else
|   stmt3
| end

というのは暗に評価順序の事も示しているつもりでした。上記でいう「ほぼ」
とは _tmp という変数が導入されているところです。(_tmp を使うのは式0が
1回だけしか評価されない事を示しているつもり)

「when 節の評価順序はこの上記 if 文に書き直した場合と同じで
す。つまり上から順に(そして左から順に) === が評価されます。
また式0は1回だけ評価されます」

とでも付け足しましょうかね・・・書きました。

メソッド呼出しの引数の評価順序も示されてなく、これだったか他
の何かだったかは予想外の動作だった気がしますが、とりあえず忘
れました(^^;。

--
新井康司 (Koji Arai)