我有一个使用eval(code_string, binding, source_file)
的Ruby模板引擎,每次调用它时,Ruby都必须解析代码字符串,它可能没有那么快。
我想找到一种替代方案,例如将code_string
转换为方法,例如method = eval("lambda { #{code_string} }")
,在执行之前,理论上eval(method, binding, source_file)
。
但问题是,我需要提供绑定和源文件名(可能还有行号)。基本上,我希望eval能够将lambda作为第一个参数,但到目前为止我找不到这样做的方法。
答案 0 :(得分:0)
经过多次挖掘后,我发现这毕竟是一个相对常见的问题:
对于这个确切问题的“解决方案”:Changing the binding of a Proc in Ruby
来自Ruby论坛的更多讨论:https://www.ruby-forum.com/topic/184259
最后,似乎我想要的是不可能有效地做到(即在某些时候没有eval
)。但是,我可以替换我的代码以使用instance_eval
,尽管它不是那么灵活,但效率更高。