How to create dinamicly method

What I am trying to accomplist is:

  class MyClass
    def addVar(var, val)
      instance_variable_set("@#{var}", val)
      define_method("#{var}") { || instance_variable_get("#{var}") }
    end
  end

  c = MyClass.new
  c.addVar('aa',10) # here pops the error
  c.aa # should return 10

But I get this error:
NoMethodError: undefined method `define_method' for #<MyClass:0x2d01cc0
@aa=10>
        from (irb):4:in `addVar'
        from (irb):8

I know this should work because it's used all over rails.

Advice me please

TheR

···

--
Posted via http://www.ruby-forum.com/.

define_method won't work in instance method, you have to use class method o
just use eval("def #{var}; here return value; end");

···

On Thursday 15 March 2007 13:57, Damjan Rems wrote:

What I am trying to accomplist is:

  class MyClass
    def addVar(var, val)
      instance_variable_set("@#{var}", val)
      define_method("#{var}") { || instance_variable_get("#{var}") }
    end
  end

  c = MyClass.new
  c.addVar('aa',10) # here pops the error
  c.aa # should return 10

But I get this error:
NoMethodError: undefined method `define_method' for #<MyClass:0x2d01cc0
@aa=10>
        from (irb):4:in `addVar'
        from (irb):8

I know this should work because it's used all over rails.

Advice me please

TheR

What I am trying to accomplist is:

  class MyClass
    def addVar(var, val)
      instance_variable_set("@#{var}", val)
      define_method("#{var}") { || instance_variable_get("#{var}") }

        self.class.class_eval {
          define_method("#{var}") { || instance_variable_get("@#{var}") }
        }

    end
  end

  c = MyClass.new
  c.addVar('aa',10) # here pops the error
  c.aa # should return 10

Regards,

Brian.

···

On Thu, Mar 15, 2007 at 10:57:54PM +0900, Damjan Rems wrote:

Marcin Raczkowski wrote:

···

On Thursday 15 March 2007 13:57, Damjan Rems wrote:

  c.addVar('aa',10) # here pops the error
Advice me please

TheR

define_method won't work in instance method, you have to use class
method o
just use eval("def #{var}; here return value; end");

Yep: Each of these two variants work:
     eval "def #{var};instance_variable_get('@#{var}');end"
     eval("def #{var}; @#{var}; end")

I was trying this too, but forgot to add @ to variable name.

Thanks

TheR

--
Posted via http://www.ruby-forum.com/\.