From: Daisuke Aoki Date: 2001-10-17T01:58:00+09:00 Subject: [ruby-list:31903] Re: オブジェクトをソースへ This is a multi-part message in MIME format. --------------951691487B17D03A32A63B95 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit オブジェクトをソースへの続きですが、添付ファイルみたいにしました。 (ちょっと大きいかもしれないですが :) で、オブジェクトをソース化する上でいろいろ思ったこと。 1)ハッシュ計算 foo = [] foo << foo みたいな自分を含む(参照する)配列のハッシュ計算は無限ループ(再帰から戻れなくて) するのですが、これはそのうち解決されるのでしょうか。 Cygwin で普通にコンパイルした ruby.exe だとスタックが深いとかいうエラーで 止まってくれませんが。 添付ファイルの to_src_test.rb でその解決する手段の一つを示してみましたが、 ハッシュ計算中に自分自身のハッシュを計算する場合は回避するという方法を とってみたものの、そのための変数(to_src_test.rb のはスレッドセーフでは ないけど)を用意しないといけないのがなんか嫌ですね。 2)Struct.new(....) の返すもの foo = Struct.new(....) bar = foo.new で、bar は自分が何者か(Structのインスタンス)というのが分かるのですが、 foo は分からないんです。分かるのは Class のインスタンスなことなんですが、 new すると Struct のサブクラスのインスタンスを作るし、単なる Class の インスタンスではないという情報が欲しいなと思ったのです。foo 及び bar を ソース化するときは、bar は大丈夫なんですが、foo がうまい方法が 見つからないのです。foo.new で Sturct のサブクラスのインスタンスを作成 するかどうかで判別するようにしましたが、別の違うクラスで new すると Struct のサブクラスのインスタンスを作成する場合と分別できないのと、 判別するのに new を実行しないといけないのがネックなのです。 -- 青木大輔 --------------951691487B17D03A32A63B95 Content-Type: application/octet-stream; name="to_src.lzh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="to_src.lzh" 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 --------------951691487B17D03A32A63B95--