Atributos de instância dinâmica

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