def method_missing(meth, *args)
if meth.to_s =~ /^(.*?)=$/
f = $1.intern
raise ArgumentError, "no such value #{f}" unless @field.has_key? f
type = @field[f]
o = args[0]
if @array[f]
raise TypeError, "for #{f}, expecting Array, got #{o.class}" unless o.kind_of? ::Array
o.each { |e| raise TypeError, "for elements of #{f}, expecting #{type}, got #{e.class}" unless e.kind_of? type }
@values[f] = o
@dirty = true
else
raise TypeError, "for #{f}, expecting #{type}, got #{o.class}" unless o.kind_of? type
@values[f] = o
@dirty = true
end
else
raise ArgumentError, "no such value #{meth}" unless @field.has_key? meth
@values[meth]
end
end