使用动态创建的方法def的字符串的eval创建类

时间:2012-02-15 15:21:18

标签: ruby class dynamic-class-creation

我的代码有一个奇怪的情况:

c = Class.new { eval parser }

...适用于IRB(ruby 1.9.3),但不适用于代码。我已经尝试过使用和没有'class Foo'包装我的方法。至少可以说,这令人沮丧。我可以将字符串解析器的内容直接复制到irb中的变量解析器中,然后使用上面的行创建类,我的方法就在那里,但是当我在代码中执行它时,它们不是。

2 个答案:

答案 0 :(得分:2)

C = Class.new
C.class_eval(code)

...在Ruby 1.9.2中为我工作,即使保存在文件中也是如此。你可以尝试看看它是否在1.9.3中有效吗?

答案 1 :(得分:0)

我已经解决了。

情况是我正在动态创建定义以便制作优化的解析器,而我正在使用增量添加的字符串来构建它。可以想象,有很多引用转义涉及,尤其是MySQL查询。当我在irb中测试时,我忘了使用

puts parser

...在打印时评估字符串,同时删除一级转义。

解决方案很简单: eval 我的字符串在class_eval之前。

fetchclass = Object.const_set(
                characteristics['shortname'],
                Class.new { class_eval( eval parser ) } )