def struct *fields
fields = fields.flatten
Class.new(self) do
include ArrayFields
const_set :FIELDS, ArrayFields::FieldSet.new(fields)
fields.each do |field|
field = field.to_s
if field =~ %r/^[a-zA-Z_][a-zA-Z0-9_]*$/
begin
module_eval "def \#{ field } *a\na.size == 0 ? self['\#{ field }'] : (self.\#{ field } = a.shift)\nend\ndef \#{ field }= value\nself['\#{ field }'] = value\nend\n"
rescue SyntaxError
:by_ignoring_it
end
end
end
def initialize *a, &b
super
ensure
@fieldset = self.class.const_get :FIELDS
end
def self.[] *elements
array = new
array.replace elements
array
end
end
end