私はRubyでスクリプトを評価していますが、各スクリプトに、というグローバル変数を持つ独自のサンドボックスを持たせたいと思います$window
。変数は$window
、スクリプトが実行されているサンドボックスに応じて異なるものを指す必要があります。スレッドローカル変数は機能しますが、私はスレッドを使用していません。私はRubyCAPIを使用しているので、可能性が少し広がります。
現在、私は各スクリプトを内で実行している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
内のグローバル変数を閉じる方法はありますBinding
か?私は可能な解決策を見つけて、それを以下に投稿しました。