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