From: Robert Dober Date: 2006-04-11T02:19:30+09:00 Subject: Re: Adding in class attribute with a Module ------=_Part_2670_14895185.1144689566610 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On 4/10/06, Gregory Seidman 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? Thx Robert } T. > --Greg class Module > def cattr( *names ) > names.map{ |name| name.to_s }.each do > |name| > eval <<-EOEval > def self.#{name}; @#{name}; end > def self.#{name}=3D(x); @#{name}=3Dx; end > EOEval > define_method( name ){ self.class.send( name ) } > define_method( name + "=3D"){ |v| self.class.send= ( > name + "=3D", v ) } > end > end > end > > -- Deux choses sont infinies : l'univers et la b=EAtise humaine ; en ce qui concerne l'univers, je n'en ai pas acquis la certitude absolue. - Albert Einstein ------=_Part_2670_14895185.1144689566610--