我正在尝试在方法中动态设置(不是创建,它已经存在)全局 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/