ruby-on-rails - 我可以使用 Rails 将字符串转换为类吗?

标签 ruby-on-rails ruby metaprogramming

假设您有一堆要访问的类

ModuleA::ModuleB::ActualClassName

我想要的是绕过 ModuleA::ModuleB 部分,只需键入 ActualClassName 并让它知道我在说什么。

文件与类的比例为 1:1,因此我使用 Dir 导航到目录并创建一个字符串类名数组,我想将其转换为变量。

tl;dr

给定 ["ClassOne", "ClassTwo"] 使得

ClassOne == ModuleA::ModuleB::ClassOneClassTwo == ModuleA::ModuleB::ClassTwo

这样做的根本目标是让我在 Rails 控制台上的生活更轻松。

编辑:我发现围绕我真正要求的内容存在很多混淆,部分原因是我自己误用了 Ruby 术语。相反,我将提出一个“填空”类型的解决方案。

假设 ModuleA::ModuleB::ClassOneModuleA::ModuleB::ClassTwo 是已定义的类

classes = ["ClassOne", "ClassTwo"]
# insert ruby magic here
ClassOne == ModuleA::ModuleB::ClassOne # true
ClassTwo == ModuleA::ModuleB::ClassTwo # true

最佳答案

classes = ['ClassOne', 'ClassTwo']

classes.each {|klass| Object.const_set(klass, ModuleA::ModuleB.const_get(klass))}

puts ClassOne == ModuleA::ModuleB::ClassOne # => true
puts ClassTwo == ModuleA::ModuleB::ClassTwo # => true

这不是您要找的吗?引用:Module#const_get , Modulet#const_set

关于ruby-on-rails - 我可以使用 Rails 将字符串转换为类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946130/

相关文章:

ruby-on-rails - client_side_validations 'Cannot read property ' 用户[电子邮件 ]' of undefined'

ruby - 如何将 rspec instance_double 验证为 doubled 类的实例?

带有 mod_ruby 的 Apache 上的 Ruby

ruby - 顶层定义的方法在哪里?

mysql - Rails - 如何从对象中获取随机记录?

ruby-on-rails - rails 中的 "to_param"问题

mysql - Rails 中列名称的别名属性

macros - 有没有办法在 Julia 中将函数转换为表达式?

斯卡拉 3 : inline vs quoted (macros)

ruby-on-rails - 在 Rails 中使用 Postgres UUID 时避免 PG::InvalidTextRepresentation 错误