2012-03-03 3 views
2

どのようにしてメインバインディングを取得できますか?言い換えれば、次のコードでは、some_codes ... some_codesで以前に行われた割り当てなどをすべて無視するようにするにはどうすればよいですか?メインバインディングでevalを実行するには

some_codes 
... 
some_codes 
eval(string_to_be_executed, binding) 
+2

あなたは私達にあなたの実際のコードを表示することができます? "' 'some_codes'"はあなたがここで何をしようとしているのか理解するのに役立ちません。 –

+0

私はあなたが私の質問を理解するとは思わない。 – sawa

答えて

2

最も簡単な方法は、単にファイルの先頭に結合を作成することです:

block = Proc.new{} 
# some_codez 
# ... 
# some more of teh codez 
eval(string_to_be_evaluated, block.binding) 
+0

よろしいですか?それは私が期待していたものです。実際に、私がやったことは '$ main_binding = binding'をファイルの先頭に置き、' eval'の中でそれを使用することでした。それはあなたのコードよりも少しシンプルなようです。 – sawa

+0

良い点は、ProcがKernel上で定義されているため、Proc上でバインディングを呼び出す必要はありません。バインディングについて教えてくれてありがとう、btw、彼らはかなりクールです! –

+0

あなたの答えをありがとう。他の人たちが私と同じ行で考えていることを知って、それが正しいことを理解できることは良いことです。 – sawa

2

私は受け入れベンの答えよりも少しエレガントであるように思われ、これをやってしまいました。ロードする最初のファイルの先頭に

、何か割り当てる:次に

$main_binding = binding 

を、必要なときに、私は同じようにそれを使用することができます:

eval(string_to_be_evaluated, $main_binding) 
関連する問題