[#48683] klass と Marshal.load(Marshal.dump klass) が同じにならない — dezawa <dezawa@...>
出沢です
5 messages
2012/04/06
[#48689] 日時の文字列をTimeクラスに変換したい — ichirojiro@...
ichirojiroです
7 messages
2012/04/09
[#48710] 多言語を含むUTF-8テキストから文字種を判定する方法 — えだ ゆきひこ <eda@...>
えだです。
7 messages
2012/04/25
[#48711] Re: 多言語を含むUTF-8テキストから文字種を判定する方法
— "NARUSE, Yui" <naruse@...>
2012/04/25
2012年4月25日11:19 えだ ゆきひこ <eda@nerv.org>:
[ruby-list:48686] Re: klass と Marshal.load(Marshal.dump klass) が同じにならない
From:
dezawa <dezawa@...>
Date:
2012-04-07 11:17:00 UTC
List:
ruby-list #48686
出沢です
ありがとうございます。
> 正直なところ情報が少なくてなんともいいがたいのですが、
> Marshalはクラスやモジュールは中身をコピーするのではなく名前で
> 参照します。ですから、同じプロセスでこの2つが違うというのは
> あまり考えにくいのですが。object_idとかでこの2つが本当に同
> じものか確認していただけませんか?
object_id では同じにならなかったです。82984630 と 83271850 でした。
どういう情報が必要か分からないので、とりあえずどのように調べたか、を述べ
ます。
1) klass == Marshal.load(Marshal.dump klass) をどう調べたか
2) pp したデータはどう採ったか
3) object_id はどうなのか(まつもと さんの質問に答えて)
1) klass == Marshal.load(Marshal.dump klass) をどう調べたか
RDoc::Generator::Ri を cp した RDoc::Generator::Latex にて
generate に次の記述があります。
RDoc::TopLevel.all_classes_and_modules.each do |klass|
:
:
end
ここに、
pp klass == Marshal.load(Marshal.dump klass)
を入れ、
rdoc -f latex /some/path/ube_plan.rb
として、結果をみました。
2) pp したデータはどう採ったか
RDoc::RI::Store#save_class の最後が
marshal = Marshal.dump klass
open path, 'wb' do |io|
io.write marshal
end
となっています。
ここを次の様に変えました。
marshal = Marshal.dump klass
pp klass
pp Marshal.load marshal
open path, 'wb' do |io|
io.write marshal
end
RDoc::RI::Store#save_method についても同じようにしました。
そのうえで、
rdoc -f ri /some/path/ube_plan.rb としてこのスレッドTopでpostしたpp
データを採りました。
3) 1) の pp の後に、
pp [klass.object_id,(Marshal.load(Marshal.dump klass)).object_id]
として
rdoc -f latex /some/path/ube_plan.rb
としました。
[82984630, 83271850] となりました。