From: Sylvain Joyeux Date: 2006-02-19T23:36:26+09:00 Subject: Re: [/QUIZ] metakoans.rb (#67) --Boundary_(ID_dx7Rsa0qwkPEsFgrENL8SA) Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7BIT Content-disposition: inline Here's mine -- Sylvain Joyeux --Boundary_(ID_dx7Rsa0qwkPEsFgrENL8SA) Content-type: application/x-ruby; name=knowledge.rb Content-transfer-encoding: 7bit Content-disposition: attachment; filename=knowledge.rb class Module def attribute(*attr_def, &init) attr_def = attr_def[0..-2] + attr_def.last.to_a if Hash === attr_def.last attr_def.each do |name, defval| by_object = Hash.new define_method(name) { defval || ( by_object[object_id] ||= instance_eval(&init) if init ) } define_method("#{name}?") { send(name) } define_method("#{name}=") { |value| (class << self; self end).instance_eval { attr_accessor name } instance_variable_set("@#{name}", value) } end end end --Boundary_(ID_dx7Rsa0qwkPEsFgrENL8SA)--