用lambda替换eval(code_string,binding)?

时间:2014-12-10 01:25:28

标签: ruby eval

我有一个使用eval(code_string, binding, source_file)的Ruby模板引擎,每次调用它时,Ruby都必须解析代码字符串,它可能没有那么快。

我想找到一种替代方案,例如将code_string转换为方法,例如method = eval("lambda { #{code_string} }"),在执行之前,理论上eval(method, binding, source_file)

但问题是,我需要提供绑定和源文件名(可能还有行号)。基本上,我希望eval能够将lambda作为第一个参数,但到目前为止我找不到这样做的方法。

1 个答案:

答案 0 :(得分:0)

经过多次挖掘后,我发现这毕竟是一个相对常见的问题:

对于这个确切问题的“解决方案”:Changing the binding of a Proc in Ruby

来自Ruby论坛的更多讨论:https://www.ruby-forum.com/topic/184259

最后,似乎我想要的是不可能有效地做到(即在某些时候没有eval)。但是,我可以替换我的代码以使用instance_eval,尽管它不是那么灵活,但效率更高。