On Tue, Apr 11, 2006 at 02:19:30AM +0900, Robert Dober wrote: } On 4/10/06, Gregory Seidman <gsslist+ruby / anthropohedron.net> wrote: } > } > On Mon, Apr 10, 2006 at 11:58:43PM +0900, TRANS wrote: } > } > Is it possible to add class attributes (cattr_accessor) using a } > module? } > } > If so could you give an example? } > } } > } There is no "Ruby Way" to do this b/c Ruby's module methods aren't } > } inherited by classes that include them. Though I've asked for a way } > } man times now! } > [...] } > } Only ugly meta-programming hacks will give the sought behavior --and } > } even then their are corner-case complications. } > } > Does this count as ugly meta-programming? } > } > module M } > def self.included(klass) } > class << klass } > attr_accessor :m } > end } > end } > end } } It is much prettier than the following ugly meta-programming, but I have no } clue how it works !!! } Could you explain please? The first thing to understand is that when you define a class, e.g. class Foo; ... end, you are just setting a constant (Object::Foo, in this case) to a new instance of a Class. Just as you can add new methods to an instance of any other kind of object with class << obj; ... end, you can add new methods to Foo. When a module is included, its self.included method is called with the Class instance it is being included into as an argument. I am defining self.included to add an attribute accessor to that Class instance. } Thx } Robert [...] --Greg