From: cibercitizen1 Date: 2008-11-26T07:00:26+09:00 Subject: Re: my attr_accessor My solution above for having fo = Foo.new() { color "red" height 50 } by defining class Foo extend MyAccessor my_attr(:title, "default title") my_attr(:height, 100) my_attr(:color, 'black') def initialize( &bloc ) instance_eval( &bloc ) end # def end # class is buggy because the ' ' in @#{nou} = s || @#{nou} || '#{defval}' ends with variables being always strings. This one works better module MyAccessor def my_attr (nou, defval=nil) if defval == nil code ="def #{nou} (s=nil) @#{nou} = s || @#{nou} end" elsif defval.class==String code ="def #{nou} (s=nil) @#{nou} = s || @#{nou} || '#{defval}' end" else code ="def #{nou} (s=nil) @#{nou} = s || @#{nou} || #{defval} end" end #puts "class_eval", code class_eval code end # def my_attr end # module