1

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

c = Class.new { eval parser }

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

4

2 回答 2

2
C = Class.new
C.class_eval(code)

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

于 2012-02-15T18:14:52.720 回答
0

我已经解决了。

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

puts parser

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

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

fetchclass = Object.const_set(
                characteristics['shortname'],
                Class.new { class_eval( eval parser ) } )
于 2012-02-15T23:21:53.860 回答