class Foo
def method_missing(m, *params)
name = m.to_s
if name[-1] == '='
mod = Module.new do
attr_accessor name[0..-2]
end
self.extend mod
self.send(m,*params)
else
throw "no method"
end
end
end
Cada instância da classe Foo terá seu próprio conjunto de atributos assim que eles forem definidos assim:
x = Foo.new
# x.f # no method
x.f = 10
x.f # 10
# Foo.new.f # no method