gpt4 book ai didi

Ruby 1.9.3 用 eval 定义 var

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:26 25 4
gpt4 key购买 nike

我正在用 Ruby 编写类似 REPL 的东西,我需要在运行时定义变量。我发现我应该使用 eval,但这里是 irb session 的摘录来测试它。在 1.9.3 中(这将在 1.8 中工作)

> eval 'a = 3'
=> 3
> a
=> NameError: undefined local variable or method `a' for main:Object

他们在 1.9 中将其更改为:

> eval 'a = 3'
=> 3
> eval 'a'
=> 3

所以似乎从 1.9 开始改变了它。我如何使用 eval(或类似的东西)在 1.9.3 中定义变量?

最佳答案

IRB is lying to you .这是一个脚本:

eval 'a = 3'
puts a

对我来说,在 1.8.7 和 1.9.3 下以同样的方式失败。

不幸的是,您和那个答案中都提到了相同的内容,

eval 'a = 3'
eval 'puts a'

在 1.9 中仍然不能作为脚本工作,尽管它在 1.8 中可以工作。

然而,这对我来说在两个方面都适用:

b = binding
b.eval 'a = 3'
b.eval 'puts a'

使用相同的 binding意味着变量赋值都发生在相同的上下文中。你将无法从外部读取它们,因为局部变量在编译时绑定(bind),但如果你正在编写 REPL,“编译时”只是“当我得到另一行并对其进行评估时”,这很好.

关于Ruby 1.9.3 用 eval 定义 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404198/

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