gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:14 25 4
gpt4 key购买 nike

你能解释一下吗?

我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):

'a = 2'

第二个来源给了我这个表达式来评估:

'a + 3'

这个有效:

a = 2
eval 'a + 3'

这也有效:

eval 'a = 2; a + 3'

但我真正需要的是这个,但它不起作用:

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

我想了解其中的区别,以及如何使最后一个选项起作用。

感谢您的帮助。

最佳答案

您可以创建一个 Binding ,并将相同的绑定(bind)与每个 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 调用中创建的任何变量稍后都可用(只要您使用相同的绑定(bind)对象)。

您可以使用 Binding#eval 而不是使用 Kernel::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

关于ruby - 为什么这个 eval 在 Ruby 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10974490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com