[#47766] Hashイテレーション中の新規キー追加 — masa <masap.hat@...>
畠山です。
10 messages
2011/01/20
[#47768] Re: Hashイテレーション中の新規キー追加
— Satoshi GUNJI <gunjisatoshi@...>
2011/01/21
郡司と申します。
[#47769] Re: Hashイテレーション中の新規キー追加
— masa <masap.hat@...>
2011/01/21
畠山です。
[#47780] Ruby1.9.2 と RDEについて — eiichi_maekawa@...
9 messages
2011/01/26
[#47781] Re: Ruby1.9.2 と RDEについて
— Koutarou Tanaka <from.kyushu.island@...>
2011/01/26
田中と申します。
[#47789] [ANN] ytl 0.0.2 リリース — "Miura Hideki" <m-72@...6.so-net.ne.jp>
三浦と申します
1 message
2011/01/28
[#47790] [].join.encoding # => #<Encoding:ASCII-8BIT> — "5.5" <5.5@...>
5.5 です。
11 messages
2011/01/29
[#47792] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>
— "NARUSE, Yui" <naruse@...>
2011/01/29
成瀬です。
[#47798] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>
— "5.5" <5.5@...>
2011/01/31
5.5 です。
[#47799] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>
— "Shota Fukumori (sora_h)" <sorah@...>
2011/01/31
sora_hです。
[#47800] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>
— "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
2011/01/31
きしもとです
[#47801] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>
— "NARUSE, Yui" <naruse@...>
2011/01/31
成瀬です。
[#47794] [ANN] Ruby-GNOME2 0.90.6 — Kouhei Sutou <kou@...>
須藤です。
7 messages
2011/01/30
[ruby-list:47769] Re: Hashイテレーション中の新規キー追加
From:
masa <masap.hat@...>
Date:
2011-01-21 08:29:53 UTC
List:
ruby-list #47769
畠山です。 まつもとさん、郡司さん、お返事ありがとうございます。 > ある「構造を持ったデータ」に対して、「構造をループで解釈しながら > 何かをする」と言う発想ではなく、「構造の外側から操作する」 > という発想です。 もちろん、自己のループ内で自己の構造を変化させると自己言及的(いわゆるメタプログラミング)になり、将来の挙動が予測困難になる可能性があるので、確実に動作を保証したい場合はそういった実装はできるだけ避ける方が良い、と私も思っています。ただ、文法としてそれが許されるか許されないかで、表現の自由度が制限されてくると思うだけです。 (ちょっと横道にそれますが Ruby はこういう自己言及の問題を考える上でとても有効なツールであると個人的には思っています。Ruby は動的な処理が他の言語に比べて優れている(と思う)ので、ある便利なソフトウェアを開発できるだけではなく、科学的な哲学的な知的好奇心の思考実験の道具としてもつかえると思っているのですが、文法表現の自由度が下がると(思考)実験できる幅も狭まってしまいます。つまり、思考実験の道具としての価値も下がってしまいます。この動的な処理をうまく活用できると Rails のように優れたツールが生まれますし、逆に黒魔術と言われるようにコードの可読性保守性が低下する場合もあると思います。) 話を元に戻します。 つまりは、もともと Ruby 1.8 でもブロックイテレーション中のハッシュ書き換え操作 (Hash#merge, Hash#rehashなど) は意図されて許可されていたものではなく、それがいままで正しく? (プログラマの意図したように) 動いていた場合というのはたまたま偶然であって、また、Hash 実装上の理由ですべての場合で動作するように変更するのは難しい、ということで、Ruby 1.9.2 で修正した (意図的に禁止した)、という解釈でよろしいのでしょうか。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/23617 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/23626 つまり、Ruby 1.9.2 以降も禁止されて続ける (だろう) と解釈してよいでしょうか。 個人的には、Hash (Array) ブロックイテレーション中の動的なデータ変化、挙動変化は Ruby らしいと感動しいていた者なので残念ですが。 畠山