我有以下代碼:如何在Ruby中爲eval創建單獨的命名空間?
code = "def hi; \"hi!\"; end"
eval code
hi == "hi!" # true
我可以訪問方法hi
,因爲當它在所評估的代碼被定義,它被定義爲主要物體的方法。
然而,這也意味着,評估的代碼可以訪問的東西我定義之外呢:
def hi; "hi!"; end
eval "hi == \"hi\"" # => true
我想有一個單獨的命名空間中,我可以運行評估代碼;我會怎麼做?
我嘗試玩module_eval
並使用模塊作爲命名空間,但我無法獲得它來定義方法或類,並在另一個評估中訪問它。
我需要能夠執行第二個評估,我可以訪問任何以前的定義..我怎麼能做到這一點? –