我的代码有一个奇怪的情况:
c = Class.new { eval parser }
...适用于IRB(ruby 1.9.3),但不适用于代码。我已经尝试过使用和没有'class Foo'包装我的方法。至少可以说,这令人沮丧。我可以将字符串解析器的内容直接复制到irb中的变量解析器中,然后使用上面的行创建类,我的方法就在那里,但是当我在代码中执行它时,它们不是。
答案 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 ) } )