From: Robert Klemme Date: 2005-08-29T00:16:22+09:00 Subject: Re: Dynamic methods / accessors Frodo Larik wrote: > Hi all, > > I'm trying to setup some kind of dynamic method / accessor assignment > to objects. But I don't want the other objects from the same class to > know about "personal" methods. I'm just learning Ruby, so it could be > I'm missing some crucial knowledge. > > For example: > > class MyThing > def create_method(method) > # I found two things on internet which can acchieve this > # self.class.class_eval { attr_accessor method } > # AND > # self.class.send(:define_method, method, &block) > # but I'm not sure which is the best one to use, but I think > # I prefer the attr_accessor, because that's the functionality > # I need > end > end > > > # Create first object > a = MyThing.new > a.create_method('box') # Adds a method box to a > a.box = 'something inside' > > # The nicest thing would be if I could do something like this: > a.create_method('box','some_value'), so a.box is populated with 'some > value' > > # Create second object > b = MyThing.new > > # I don't want the following to happen > b.box = 'something other' > > I don't want the method 'box' be available to b, only to a > > How can I achieve this? You need so called singleton methods. These are present in just a single instance. You define them via the singleton class. (Disclaimer: there has been some debate about the naming of these because "singleton" can be misleading here, but AFAIK this is still the officiel term.) You access the singleton class (a class that is associated with a single instance only) like this class <