假设您有一堆要访问的类
ModuleA::ModuleB::ActualClassName
我想要的是绕过 ModuleA::ModuleB
部分,只需键入 ActualClassName
并让它知道我在说什么。
文件与类的比例为 1:1,因此我使用 Dir 导航到目录并创建一个字符串类名数组,我想将其转换为变量。
tl;dr
给定 ["ClassOne", "ClassTwo"]
使得
ClassOne == ModuleA::ModuleB::ClassOne
和 ClassTwo == ModuleA::ModuleB::ClassTwo
这样做的根本目标是让我在 Rails 控制台上的生活更轻松。
编辑:我发现围绕我真正要求的内容存在很多混淆,部分原因是我自己误用了 Ruby 术语。相反,我将提出一个“填空”类型的解决方案。
假设 ModuleA::ModuleB::ClassOne
和 ModuleA::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/