加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个eval在Ruby中不起作用

发布时间:2020-12-17 04:04:57 所属栏目:百科 来源:网络整理
导读:你能解释一下吗? 我想从两个不同的来源评估值和计算.一个来源给我以下信息(以编程方式): 'a = 2' 第二个来源给我这个表达式来评估: 'a + 3' 这有效: a = 2eval 'a + 3' 这也有效: eval 'a = 2; a + 3' 但我真正需要的是这个,它不起作用: eval 'a = 2'e
你能解释一下吗?

我想从两个不同的来源评估值和计算.一个来源给我以下信息(以编程方式):

'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,您可以使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读