From: matz@... (Yukihiro Matsumoto) Date: 1998-11-25T14:29:50+09:00 Subject: [ruby-dev:3663] Re: Multiple assignment at yield() まつもと ゆきひろです In message "[ruby-dev:3660] Re: Multiple assignment at yield()" on 98/11/25, Shin-ichro Hara writes: |原です。 ||まあ,いろいろ考えてみます.複雑なんで簡単に結論を出せない |複雑ですか、、、現行との違いは *x = a だけなんですけどねえ。 |私は複雑さは同等だと感じるのだけど、実装を考えないからかな。 いやあ,もともとの動作も十分複雑なんですけどね.^^;;; ここにいたって *x = a なんか導入しなければ良かったと思ってま す.実はこれは比較的後で導入されたので. 一番抵抗が大きい理由は「私が今の動作に納得している(個々のルー ルの積み上げとして)」という点でしょう. もう一度まとめてみましょう.左辺がコンマを含む時の動作は現状 (A)も原さんの案(B)も同じだとしましょう.モデルとしては厳密に は違うのですが(強制的な配列化の手順が入る),結果が同じなので 無視することとします. 違いがあるのは左辺が *x の場合です. *x = 1,2,3 (A) [1,2,3] (B) [[1,2,3]] # あれ? [1,2,3]だっけ? *x = a (A) a.to_a (B) [a.to_a] (A)の動作は「右辺を配列化し,それを代入」です.(B)の動作は 「右辺を強制的に配列化し,その要素がひとつであれば,to_aした ものと置き換える」です(よね). やはりルールが難しくなってる印象があります.[ruby-dev:3625] の問題はProc#callの方で対応すべきでないかと思います. まつもと ゆきひろ /:|)