I don't know why I was using instance_variable_set... I think it was a hangover from an earlier experiment. def attr_constructor(*args) self.class_eval %Q{ def initialize(#{args.join(', ')}) #{args.collect{ |setting| "@#{setting} = #{setting}\n" }} end } end > -----Original Message----- > From: Daniel Sheppard > Sent: Tuesday, 30 March 2004 10:43 AM > To: ruby-talk ML > Subject: Attr_constructor > > > I've been writing a couple of very struct-like classes, and > got annoyed at having to write: > > class MyStructLikeThing > attr_accessor :one, :two, :three, :four, :five > def initialize (one, two, three, four, five) > @one, @two, @three, @four, @five = one, two, three, four, five > end > end > > And how ugly that looked in the code, so I decided to try my > hand at whipping up an attr_constructor statement. > > class Module > private > def attr_constructor(*args) > self.class_eval %Q{ > def initialize(#{args.join(', ')}) > #{args.collect{ |setting| > "instance_variable_set(\"@#{setting}\", #{setting})" }} > end > } > end > end > > class MyStructLikeThing > attr_accessor :one, :two, :three, :four, :five > attr_constructor :one, :two, :three, :four, :five > end > > It strikes me as a little cludgy. Is there a better way of > doing this? Is there a way to get the args variable so that > it can be read from within a module_eval block? > > (Note also, that I know about the Struct module, this is just > a simplified example) > > Daniel Sheppard > http://jroller.net/page/soxbox > ############################################################## > ####################### > This email has been scanned by MailMarshal, an email content > filter. > ############################################################## > ####################### > > ##################################################################################### This email has been scanned by MailMarshal, an email content filter. #####################################################################################