From: Robert Klemme Date: 2006-12-26T04:55:08+09:00 Subject: Re: dynamic changes! On 25.12.2006 20:44, Spitfire wrote: > Robert Klemme wrote: >> On 25.12.2006 19:37, Spitfire wrote: >>> These are the sequence of actions I performed in irb. >>> >>> class Dumber >>> def sayHello >>> puts "Hello!" >>> end >>> end >>> db = Dumber.new() >>> >>> db.sayHello >>> ## executes sayHello method! >>> >>> Class Dumber >>> def sayHi >>> puts "Hi" >>> end >>> end >>> >>> db.sayHi >>> ## executes the newly added method sayHi! >>> >>> how does the object already created aware of the newly added method? >> >> The method is added to it's *class* - and that relationship does not >> change, only the class changes. > > It's class? I'm sorry I don't understand what you are saying. Can you > please clarify? Sorry, should have read "its class". Please look closely at the IRB session to understand what I mean: irb(main):001:0> class Foo irb(main):002:1> def m1() end irb(main):003:1> end => nil irb(main):004:0> Foo.object_id => 1917050 irb(main):005:0> Foo.instance_methods.grep /m\d/ => ["m1"] irb(main):006:0> f=Foo.new => # irb(main):007:0> f.class => Foo irb(main):008:0> f.class.object_id => 1917050 irb(main):009:0> f.m1 => nil irb(main):010:0> f.m2 NoMethodError: undefined method `m2' for # from (irb):10 from :0 irb(main):011:0> class Foo irb(main):012:1> def m2() end irb(main):013:1> end => nil irb(main):014:0> Foo.object_id => 1917050 irb(main):015:0> Foo.instance_methods.grep /m\d/ => ["m2", "m1"] irb(main):016:0> f.class => Foo irb(main):017:0> f.class.object_id => 1917050 irb(main):018:0> f.m1 => nil irb(main):019:0> f.m2 => nil robert