2012-03-03 3 views
2

어떻게 주 바인딩을 가져올 수 있습니까? 다른 말로하면, 다음 코드에서 eval은 이전에 some_codes ... some_codes에서 이루어진 모든 할당 등을 무시하도록 어떻게 할 수 있습니까?주 바인딩에서 eval을 실행하는 방법

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

당신이 우리에게 실제 코드를 보여줄 수 :

$main_binding = binding 

그런 다음, 필요한 경우, 나는 그것을 좋아 사용할 수 있습니다 : 첫 번째 파일의 시작 부분에서

같은 것을 지정,로드 할 ? "''some_codes'"는 당신이 여기서하려고하는 것을 이해하는 데 도움이되지 않습니다. –

+0

나는 내 질문을 이해하지 못한다고 생각합니다. – sawa

답변

2

가장 간단한 방법은 단지 파일의 상단에 바인딩을 만드는 것입니다.

eval(string_to_be_evaluated, $main_binding) 
+0

오케이. 그것이 내가 기대했던 것입니다. 실제로, 내가 한 일은'$ main_binding = binding'을 파일의 시작 부분에 넣고'eval' 내에서 그것을 사용하는 것입니다. 그것은 당신의 코드보다 약간 단순한 것 같다. – sawa

+0

좋은 점은 Proc에서 바인딩을 호출 할 필요가 없다는 것입니다. 커널에 정의되어 있기 때문입니다. 바인딩에 대해 가르쳐 주셔서 감사합니다, btw, 그들은 아주 멋지다! –

+0

답변 해 주셔서 감사합니다. 다른 사람들이 나 자신과 같은 줄에서 사고하고 있다는 것을 아는 것은 좋은 일입니다. 그래서 그 길은 옳다는 것을 이해할 수 있습니다. – sawa

2

내가 받아 벤의 대답보다 약간 우아한 것 같다하는이, 일을 결국 :

some_codes 
... 
some_codes 
eval(string_to_be_executed, binding) 
관련 문제