【发布时间】:2021-06-12 08:28:35
【问题描述】:
处理一些我需要能够通过binding从字符串定义方法和本地变量的功能
我认为代码最能说明问题,所以这就是我想要完成的:
mybind = binding
mybind.eval("a = 5")
mybind.eval("a") #=> 5
a #=> NameError: undefined local variable or method `a'...
# Calling it in global/main scope doesn't find anything, but it's found in the `mybind` scope
mybind.eval("def thing; 3; end")
mybind.eval("thing") #=> 3
thing #=> NameError: undefined local variable or method `thing'...
# Calling it in global/main scope doesn't find anything, but it's found in the `mybind` scope
本质上,我不希望定义的任何方法/变量进入全局范围,但我希望它们可以在第二次调用同一个绑定/eval 时被调用。这些将作为字符串传递,因此也无法调用可调用块。
我试过instance_eval、class_eval、eval和instance_exec
instance_eval 几乎是完美的,除非由于某种原因,在下一次调用的instance_eval 中无法访问定义的任何本地变量。
我对使用binding 有点陌生,所以如果有什么明显的遗漏,请告诉我。否则,如果有人对如何实现这一点有任何想法,即使使用不同的流程,我也会非常感谢任何帮助。
谢谢!
我使用的是 Ruby 2.7.2,但如果能提供解决方案,我可以升级。
【问题讨论】:
标签: ruby ruby-on-rails-5 eval