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  ot familiar with Marshaling at all, but this may help you debug. Good  uck :)

-- 
Mikael HİŞilund, CTO of Meta.io

On Aug 20, 2008, at 6:17 AM, Patrick Li <patrickli_2001 / hotmail.com>  
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 #<MyPage:0x27af394 @a=3>
> (NoMethodError)
> -- 
> Posted via http://www.ruby-forum.com/.
>