How to create dinamicly method


#1

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:inaddVar’
from (irb):8

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

Advice me please

TheR


#2

On Thursday 15 March 2007 13:57, Damjan R. 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”);


#3

Marcin R. wrote:

On Thursday 15 March 2007 13:57, Damjan R. 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


#4

On Thu, Mar 15, 2007 at 10:57:54PM +0900, Damjan R. 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}") }

    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.