Define_method with instance assignment to proc

I’m having one of Those mornings!

I’m not sure how to overcome the syntax error this causes:

class Module
def cast_writer(name,cast)
if cast.kind_of?(Proc) or cast.kind_of?(Method)
define_method(name) { |x| instance_eval("@#{name}") = cast.call(x) }
end
end
end

syntax error (SyntaxError)
define_method(name) { |x| instance_eval("@#{name}") = cast.call(x) }
^

The problem I see is that @name has to be provided as a string, while cast
cannot be.

Thanks,
T.

        define_method(name) { |x| instance_eval("@#{name}") = cast.call(x) }

svg% cat b.rb
#!/usr/bin/ruby
class Module
   def cast_writer(name, cast)
      if cast.kind_of?(Proc) or cast.kind_of?(Method)
         define_method(name) do |x|
            instance_variable_set("@" + name.to_s, cast.call(x))
         end
      end
   end
end

a = Object.new
Object.cast_writer(:b, Proc.new {|x| 2 * x})
a.b(12)
p a
svg%

svg% b.rb
#<Object:0x40099d54 @b=24>
svg%

Guy Decoux

Beautiful, Guy! Thank You!

T.

···

On Saturday 06 December 2003 04:55 pm, ts wrote:

svg% cat b.rb
#!/usr/bin/ruby
class Module
def cast_writer(name, cast)
if cast.kind_of?(Proc) or cast.kind_of?(Method)
define_method(name) do |x|
instance_variable_set(“@” + name.to_s, cast.call(x))
end
end
end
end