From: Stefan Rusterholz Date: 2007-08-31T05:33:15+09:00 Subject: Re: Add a method to a class at runtime? bwv549 wrote: > module SomeModule > def happy? > puts 'yes' > end > end > > # I can do this: > some_object.extend(SomeModule) > some_object.happy? # -> 'yes' > > # But I really need to give the class the method (not just instances) > # because I have a collection of hundreds of thousands of objects > # and need them all to have the method quickly. > > # The problem is that I don't know the class that needs to include the > method > # until runtime! > > # This won't work: > > some_object.class.include(SomeModule) > # -> NoMethodError: private method `include' called for > > # What is the workaround to add a method to a class (known only at > runtime)? > > Thanks You have a misunderstanding here. *All* methods are added to classes at runtime, since that's the only "time" ruby has (there is no compile time). Of course, C-extensions are excluded from this. You can always reopen a class: class Array def foo; "foo!"; end end [].foo # => "foo!" Regards Stefan -- Posted via http://www.ruby-forum.com/.