我需要从名称中创建一个对象作为字符串(即某些JSON中的值)。我知道我可以使用:
classname = 'MyClass'
eval classname
并且好多了:
classname = 'MyClass'
obj = Kernel.const_get(classname)
但由于这是Ruby,我想知道是否有其他替代方案(也许是更主观优雅的方式)来实现这一目标。
答案 0 :(得分:2)
所以我已经在网上搜索了,简短的回答是"没有"。
然而Kernel#qualified_const_get
written by a "Gregory"有点整洁,因为它可以获得嵌套类,但这显然不是本机Ruby。
我发现了一个很棒的博客"电动羊"作者:Sidu Ponnappa,他使用所有三种方法做了精彩的写作" Loading classes from strings in Ruby" - 结论是:
尝试将字符串转换为时,有三种选择 对应的类:内核#const_get,eval和 内核#qualified_const_get
内核#const_get是最快的,不处理嵌套类和 适用于除了最奇怪的场景之外的所有场景(您正在尝试的课程) 掌握isn的命名常数
eval明显变慢,但它适用于任何情况
- 醇>
内核#qualified_const_get非常慢,但处理嵌套 类。但是,在有本机实现之前,它会失败 每个方面的评估