Ruby:将变量导出到本地命名空间

标签 ruby reflection metaprogramming

我想以编程方式将新变量插入本地 Ruby 命名空间。例如,我希望能够写

label = 'some_name'
# some code equivalent to
#   some_name = 3
# but using only 'label' to get the name.
puts some_name  # returns 3

我要在中间放些什么来完成这项工作?

最佳答案

我已经回答了另一个 SO question similar to this .简短的回答是这样的,如果你特别想根据另一个变量的值创建一个名称为它的局部变量,那么就没有办法做到这一点。你只是想让看起来好像你已经创建了一个本地但它真的是 ruby 魔法,那么@mikong 的回答是一种方法。

请注意,如果您放宽约束并乐于创建一个实例变量,那么您可以这样做。

label = 'some_name'
self.instance_variable_set("#{label}", 3)
puts @some_name

您甚至可以动态定义一个访问器,然后您可以摆脱难看的@,但您将再次拥有一个伪装成局部变量而不是真正的局部变量的方法。

关于Ruby:将变量导出到本地命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020233/

相关文章:

ruby-on-rails - 使用 Gerrit 部署 Ruby on Rails 数据库

C# 反射不调用方法

具有继承的 C++ 模板部分特化

hibernate - 在加载域之前修改gorm映射

ruby - 我该如何处理规范化?

sql - Rails 查询到 SQL 语句

c# - 我应该提供一个带有 nameof 成员名称的方法,还是应该依赖 CallerMemberName 来为我做这件事?

ruby - 在 ruby​​ 类的特征类中设置实例默认值

javascript - 在 Javascript 函数中使用 onclick 函数拉取部分 (Ruby on Rails)

java - 由类名创建的反射中的 ClassNotFound 异常