次のコードがあります。
code = "def hi; \"hi!\"; end"
eval code
hi == "hi!" # true
method にアクセスできます。hi
これは、評価されたコードで定義されている場合、メイン オブジェクトのメソッドとして定義されているためです。
ただし、これは、評価されたコードが、その外部で定義したものにアクセスできることも意味します。
def hi; "hi!"; end
eval "hi == \"hi\"" # => true
評価されたコードを実行できる別の名前空間が必要です。どうすればいいですか?
名前空間のモジュールをいじってmodule_eval
使用しようとしましたが、メソッドまたはクラスを定義して別の評価でアクセスすることはできません。