From: matz@... (Yukihiro Matsumoto) Date: 1998-11-25T18:04:01+09:00 Subject: [ruby-dev:3672] Re: Multiple assignment at yield() まつもと ゆきひろです In message "[ruby-dev:3670] Re: Multiple assignment at yield()" on 98/11/25, Shin-ichro Hara writes: ||現在の実装だと右辺の処理と左辺の処理はまったく別のところで行 ||われていますから,実装としては原案は不都合なわけです.毎回強 ||制的な配列化を行い,左辺の処理に任せるという実装も考えられま ||すが,それだと多くの場合無駄な配列を生成することになり,効率 ||上あまり望ましくありません. | |ふむ。やはりそういわれると思っていました。(^^; 無駄な配列はなるたけ発生しない方が良いですものね.まあ,これ は実装の都合ですから今後解決できる可能性はあります.それより もむしろ || yield a, b || ||と || || yield [a, b] || ||の区別が付かないことにあります.というか前者は後者の略記法の ||つもりだった.これはProc#callにも適用されますから,(少なくと ||も現状では)callでも両者の区別はつきません.[ruby-list:3625] ||はその区別を求めているわけですから,多重代入をどうこうするだ ||けでは不十分で,yieldの実行モデルを再検討しないと解決できな ||いのです. | |そうでしょう、そうでしょう。あの分かり難い説明[ruby-dev:3610] |の最後に yield の話を書いたのはその新しい yield のモデルの事で |すよ。 こっちの方が重要です.ブロック変数(||の内側)は変数がひとつだ と単純代入,リストだと多重代入になるという挙動を示すので,コ トが複雑になります.別のモデルを考えないといかんでしょうね. こちらが解決できた上で(あるいは解決しないと決めた上で)改めて 多重代入のあり方について考えたいと思ってます. |でもやっぱり大変更になるのですね。だめかあ。(^^; 変更の量はさほど問題ではないです.問題は,実装可能で,互換性 と効率を維持した上で,分かりやすく使いやすい望ましいモデルが 構築できるかどうです. まつもと ゆきひろ /:|)