我有以下代码:
code = "def hi; \"hi!\"; end"
eval code
hi == "hi!" # true
我可以访问 method hi
,因为在评估代码中定义它时,它被定义为主对象的方法。
然而,这也意味着被评估的代码可以访问我在它之外定义的东西:
def hi; "hi!"; end
eval "hi == \"hi\"" # => true
我想有一个单独的命名空间,我可以在其中运行评估代码;我该怎么做?
我尝试使用module_eval
和使用命名空间的模块,但我无法让它定义一个方法或一个类并在另一个评估中访问它。