2012-03-03 58 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) 
相關問題