From: "Mikael Høilund" Date: 2008-08-20T17:11:05+09:00 Subject: Re: Marshaling an object destroys dynamically created methods I'm not in a position to test, but it looksnto me like the method print simply isn't created on the unMarshaled object. Since the methods in Kernel are included in Object as private methods, you get the same error message from Object.new.print or Object.new.throw. I'm not familiar with Marshaling at all, but this may help you debug. Good luck :) -- Mikael H©ªilund, CTO of Meta.io On Aug 20, 2008, at 6:17 AM, Patrick Li wrote: > I noticed this this afternoon: > Unmarshaling a marshaled object, makes all dynamically created methods > private. > > #Here's a class that dynamically creates the method MyPage#print() > class MyPage > def initialize > MyPage.class_eval do > def print > puts @a > end > end > end > end > > #Test the class > page = MyPage.new > page.print #prints nil > > #Marshal the object > File.open("object.obj","w") do |f| > Marshal.dump(page, f) > end > > #UnMarshal the object, and try printing again > page = nil > File.open("object.obj","r") do |f| > page = Marshal.load(f) > end > page.print > > #gives me: > #private method `print' called for # > (NoMethodError) > -- > Posted via http://www.ruby-forum.com/. >