From: Shin-ichro Hara Date: 1998-11-25T17:55:54+09:00 Subject: [ruby-dev:3670] Re: Multiple assignment at yield() 原です。 In message "[ruby-dev:3668] Re: Multiple assignment at yield()" on 98/11/25, Yukihiro Matsumoto writes: | |まつもと ゆきひろです |あ,なる.to_a化は左辺がリストの時にしか発生しないんですね. そうそう。そういうことです。 |で,実装を考えてて困ったのが,右辺の展開が左辺の状態によって |変化する点です.現状の仕様だと多重代入の右辺は「いつもto_aに |よって配列化する」という動作で配列が渡ります.ところが原案だ |と左辺がコンマを含むかどうかで展開方法が変化するんですよね. そのとおりです。そこが大変そうです。 |現在の実装だと右辺の処理と左辺の処理はまったく別のところで行 |われていますから,実装としては原案は不都合なわけです.毎回強 |制的な配列化を行い,左辺の処理に任せるという実装も考えられま |すが,それだと多くの場合無駄な配列を生成することになり,効率 |上あまり望ましくありません. ふむ。やはりそういわれると思っていました。(^^; |それと,[ruby-list:3625]の問題は本質的にはcallやyieldの引数 |が複数与えられた時には(強制的な)配列化を行う定義になっており, | | yield a, b | |と | | yield [a, b] | |の区別が付かないことにあります.というか前者は後者の略記法の |つもりだった.これはProc#callにも適用されますから,(少なくと |も現状では)callでも両者の区別はつきません.[ruby-list:3625] |はその区別を求めているわけですから,多重代入をどうこうするだ |けでは不十分で,yieldの実行モデルを再検討しないと解決できな |いのです. そうでしょう、そうでしょう。あの分かり難い説明[ruby-dev:3610] の最後に yield の話を書いたのはその新しい yield のモデルの事で すよ。 でもやっぱり大変更になるのですね。だめかあ。(^^;