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



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

c = Class.new { eval parser }

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

C = Class.new
C.class_eval(code)

在Ruby 1.9.2中对我有效,即使保存在文件中也是如此。你能试着看看它在1.9.3中是否有效吗?

我已经解决了。

当时的情况是,我正在动态地创建定义,以便制作一个优化的解析器,并且我正在使用增量添加的字符串来构建它。正如您所能想象的,其中涉及到大量的引号转义,尤其是MySQL查询。当我在irb中测试时,我忘记了使用

puts parser

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

解决方案很简单:在class_eval'ing之前评估我的字符串。

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

相关内容

  • 没有找到相关文章

最新更新