gazoduc
#1
I need to eval code that will create globally available classes. I tried
this :
class Test
def makeA
Module.send(:eval, “class A; end”)
# same with: eval “class A; end”
puts Test.const_get(‘A’) # => Test::A
puts Module.const_get(‘A’) # => raise NameError, why ?
end
end
eval “class B; end”
puts Module.const_get(‘B’) # => B
Test.new.makeA #=> bang
Thanks for your help.
Gaspard
gazoduc
#2
Hi –
On Tue, 25 Sep 2007, Gaspard B. wrote:
eval “class B; end”
puts Module.const_get(‘B’) # => B
Test.new.makeA #=> bang
You could do:
Module.module_eval “class A; end”
or (preferable, in my opinion):
Module.const_set(“A”, Class.new)
David
gazoduc
#3
Thanks for the answer. Works great.
I just changed Module to Object since:
Object.const_set(“A”, Class.new) ==> A
Module.const_set(“A”, Class.new) ==> Module::A
2007/9/25, David A. Black [email protected]: