我正在评估 Ruby 中的脚本,我希望每个脚本都有自己的沙箱,并带有一个名为$window
. 该$window
变量应该指向不同的东西,具体取决于脚本在哪个沙箱中运行。线程局部变量可以工作,但我没有使用线程。我正在使用 Ruby C API,因此有点打开了可能性。
现在,我在 a 中运行每个脚本Binding
,所以它们在那里被沙盒化了。绑定可以有封闭的局部变量,但不能有全局变量。这是想法:
sandbox1 = window1.get_binding
sandbox2 = window2.get_binding
sandbox3 = window3.get_binding
sandbox1.eval('$window.foo') # calls 'foo' on window 1
sandbox2.eval('$window.foo') # calls 'foo' on window 2
sandbox3.eval('$window.foo') # calls 'foo' on window 3
有什么方法可以关闭 a 中的全局变量Binding
吗?我找到了一个可能的解决方案并将其发布在下面。