2012-06-11 7 views
4

설명 할 수 있습니까?Ruby에서이 평가가 작동하지 않는 이유

두 개의 다른 소스에서 값과 계산을 평가하고 싶습니다.

'a + 3' 

이 작동 :

a = 2 
eval 'a + 3' 

이것은 또한 작동합니다

'a = 2' 

두 번째 소스가 평가하는 나에게이 표현을 제공합니다 : 하나의 소스는 나에게 (프로그래밍) 다음과 같은 정보를 제공

eval 'a = 2; a + 3' 

하지만 내가 정말 필요로 모자이이며, 그것은 작동하지 않습니다

eval 'a = 2' 
eval 'a + 3' 

나는 차이를 이해하고 싶습니다, 어떻게 내가 마지막 옵션 작업을 할 수 있습니다.

도움 주셔서 감사합니다.

답변

12

당신은 Binding을 만들고 각 eval 전화와 같은 바인딩을 연결할 수 : 이전 eval 통화에서 만드는 모든 변수가 한 같은 사용으로 나중에 (사용할 수있는

1.9.3p194 :008 > b = binding 
=> #<Binding:0x00000100a60c60> 
1.9.3p194 :009 > eval 'a = 2', b 
=> 2 
1.9.3p194 :010 > eval 'a + 3', b 
=> 5 

이 방법 바인딩 개체).

대신 Kernel::eval를 사용하여, 당신은 협회가 명확하게 것이다, Binding#eval을 사용할 수

1.9.3p194 :011 > b = binding 
=> #<Binding:0x00000100b46aa8> 
1.9.3p194 :012 > b.eval 'a = 2' 
=> 2 
1.9.3p194 :013 > b.eval 'a + 3' 
=> 5 
+0

을 내가 필요 정확히 무엇인지. 감사. – Anil

관련 문제