你能解释一下吗?
我想评估来自两个不同来源的值和计算。一个来源给了我以下信息(以编程方式):
'a = 2'
第二个来源给了我这个表达式来评估:
'a + 3'
这有效:
a = 2
eval 'a + 3'
这也有效:
eval 'a = 2; a + 3'
但我真正需要的是这个,它不起作用:
eval 'a = 2'
eval 'a + 3'
我想了解其中的区别,以及如何使最后一个选项起作用。
谢谢你的帮助。
你能解释一下吗?
我想评估来自两个不同来源的值和计算。一个来源给了我以下信息(以编程方式):
'a = 2'
第二个来源给了我这个表达式来评估:
'a + 3'
这有效:
a = 2
eval 'a + 3'
这也有效:
eval 'a = 2; a + 3'
但我真正需要的是这个,它不起作用:
eval 'a = 2'
eval 'a + 3'
我想了解其中的区别,以及如何使最后一个选项起作用。
谢谢你的帮助。
您可以创建一个Binding
, 并将相同的绑定与每个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
这样,您在早期eval
调用中创建的任何变量都可以在以后使用(只要您使用相同的绑定对象)。
Kernel::eval
您可以使用代替 using ,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