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.
#####################################################################################