2012-03-03 33 views
2

如何获取主绑定?换句话说,在下面的代码中,我怎样才能让eval忽略以前在some_codes ...... some_codes中所做的所有赋值等等?如何在主绑定中运行eval

some_codes 
... 
some_codes 
eval(string_to_be_executed, binding) 
+2

你能告诉我们你的实际代码? “'some_codes'”无助于我们理解你在这里做什么。 – 2012-03-03 04:13:53

+0

我不认为你理解我的问题。 – sawa 2012-03-03 05:57:50

回答

2

最简单的方法是只创建该文件的顶部的结合:

block = Proc.new{} 
# some_codez 
# ... 
# some more of teh codez 
eval(string_to_be_evaluated, block.binding) 
+0

好的。那正是我期待的。实际上,我最终做的是将'$ main_binding = binding'放在文件的开头,并在'eval'中使用。这似乎比你的代码稍微简单一些。 – sawa 2012-03-03 05:48:17

+0

好点,不需要在Proc上调用绑定,因为它是在Kernel上定义的。谢谢你教我关于绑定,顺便说一句,他们非常酷! – 2012-03-03 05:51:59

+0

感谢您的回答。很高兴知道其他一些人正在和我一样思考,以便我能理解这种方式是正确的。 – sawa 2012-03-03 05:56:36

2

我终于实现了这一点,这似乎比本的答案,我接受稍微优雅。

在第一个文件的开头要加载,分配是这样的:

$main_binding = binding 

然后,在必要的时候,我可以用它喜欢:

eval(string_to_be_evaluated, $main_binding) 
相关问题