【发布时间】:2011-10-24 14:46:36
【问题描述】:
我想以编程方式将一个新变量插入到本地 Ruby 命名空间中。比如我希望能写
label = 'some_name'
# some code equivalent to
# some_name = 3
# but using only 'label' to get the name.
puts some_name # returns 3
我在中间放什么来完成这项工作?
【问题讨论】:
-
当你说符号时,我猜你指的不是 Ruby 中的符号,对吧(例如 :a_symbol)?如果在后面的代码行中没有使用标签,它到底是什么?
-
@mikong:谢谢,我已经澄清了这个问题。我希望
some_name稍后在代码中可用。您可以假设label只是一种知道如何调用变量的机制。 -
起初我认为你应该只使用 Ruby 常量。但是看起来你想随意更改标签,而你的 puts 行可以更改为新名称,对吗?等你确认后我会写解决方案。
-
你真的应该只使用哈希。乱用 eval 会让你的代码更丑陋、更慢、更不习惯和更容易出错。
-
@Chuck:通常这将是一种可怕的做法,是的 - 但是,在这种特殊情况下,我想为需要这样设置的用户支持某种 DSL。它肯定不会被用作通用编程技术:)
标签: ruby reflection metaprogramming