From: Robert Klemme Date: 2007-03-05T04:35:12+09:00 Subject: Re: Defining object methods in initialize On 04.03.2007 14:59, Martin Boese wrote: > I'd like to define methods on initialize that are specific for the created > object. However it seems that the few lines of code below is defining them > somewhere else since they are 'overwriting' each other: > > ============ > class Foo > def initialize(method_name, &block) > self.class.send(:define_method, method_name, &block) > end > end > > aa = Foo.new(:whoareyou) { puts "I am aa" } > bb = Foo.new(:whoareyou) { puts "I am bb" } > > aa.whoareyou > # returns: "I am bb" - But I expect: "I am aa" > bb.whoareyou > # returns: "I am bb" > > Foo.whoareyou > # undefined method ===> Good > ============ Note, you do not necessarily need instance methods in this case: irb(main):001:0> Foo = Struct.new :whoareyou => Foo irb(main):002:0> aa = Foo.new "I am aa" => # irb(main):003:0> bb = Foo.new "A am bb" => # irb(main):004:0> aa.whoareyou => "I am aa" irb(main):005:0> bb.whoareyou => "A am bb" Kind regards robert