From: George Ogata Date: 2006-02-19T23:43:29+09:00 Subject: Re: [/QUIZ] metakoans.rb (#67) The sane: class Module def attribute(arg, val=nil, &blk) if arg.is_a?(Hash) arg.each{|k,v| attribute(k,v)} return end define_method(arg) do || if instance_variables.include?("@#{arg}") instance_variable_get("@#{arg}") else blk ? instance_eval(&blk) : val end end define_method("#{arg}?"){|| !send(arg).nil?} attr_writer(arg) end end The insane: class Module def attribute(a, &b) b or return (Hash===a ? a : {a=>nil}).each{|k,v| attribute(k){v}} define_method(a){(x=eval("@#{a}")) ? x[0] : instance_eval(&b)} define_method("#{a}?"){!send(a).nil?} define_method("#{a}="){|v| instance_variable_set("@#{a}", [v])} end end