From: Clifford Heath Date: 2005-09-19T21:16:37+09:00 Subject: Metaprogramming problem I'm trying to define s.t. like attr_accessor, but one that takes an optional block defining a function that filters the value on the setter. Perhaps that will be clear if I show you the snippet: class Object def add_property(sym, &block) n = sym.id2name code = %Q{ def #{n}() @#{n} ||= nil end def #{n}=(value) @#{n} = block ? block.call(value) : value end } eval(code) end end # A test object: d = 3 # Add a getter and custom setter to 3: d.add_property(:do_it) {|v| # Custom setter method puts "d.do_it here, v = #{v.inspect}" v # No filtering this time, just return the value. } # Assign the property: d.do_it = "a value" Ok, I can see why "block" isn't defined. How can I pass add_property's block in as a block to be used *inside* the evaluated code? Clifford Heath.