Ruby:按名称设置全局变量

标签 ruby global-variables eval

我正在尝试在方法中动态设置(不是创建,它已经存在)全局 ruby​​ 变量。变量名由传递的符号决定。我目前正在做的是:

def baz(symbol)
  eval("$#{symbol}_bar = 42")
end

$foo_bar = 0
baz(:foo)
puts $foo_bar # => 42  

但对我来说,这种感觉很不对劲。这是这样做的方法吗?还是可以用不同的方式来做?另外,我不知道 evals 在 ruby​​ 中的表现如何。它运行速度比

$foo_bar = 42

最佳答案

我觉得这个方法不错。这guy说评估效率要差得多,尽管这个帖子已经有 3 年了。

我要指出的是,这种方法表明你有很多全局变量,如果代码库很重要,这通常是一种代码味道。

关于Ruby:按名称设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444198/

相关文章:

ruby - 为什么 serverspec 连接到本地主机而不是远程主机

ruby - 将 latin1 字符串转换为 utf8?

ruby-on-rails - 创建具有附加值的多维哈希

ruby - 如何测量 eval "def ..."和 define_method 的性能

php - 如何使用变量访问动态属性?

r - 如何在 R 表中正确地将 NULL 变量转换为 0

javascript - Rails 5 - Rails-ujs 已经加载

objective-c - 对类实例的全局访问 - 最佳设计方法?

java - 使用局部变量来保存全局变量的目的是什么?

java - 如何在此嵌入式程序中不使用全局变量?