Daniel Schierbeck wrote:
Is it even possible to write a method that acts like
attr_writer :blah { |input| input.to_f }
Here is my try, which seems to work:
class Class
def attr_accessor(attr)
attr = attr.to_str if attr.respond_to? :to_str
attr = attr.id2name if attr.respond_to? :id2name
attr_reader(attr)
if not block_given?
attr_writer(attr)
else
define_method(attr + '=') do |value|
instance_variable_set('@' + attr, yield(value))
end
end
end
end
class Test
attr_accessor :blah do |x| x.to_f end
attr_accessor :bla
end
t = Test.new
t.bla = 10
p t.bla
t.blah = 10
p t.blah
# Malte