下面的例子失败了
class A
class B
end
end
p Object.const_get 'A' # => A
p Object.const_get 'A::B' # => NameError: wrong constant name A::B
更新
关于先前提出的主题的问题:
最后一个gives a nice solution可以演变成
class String
def to_class
self.split('::').inject(Object) do |mod, class_name|
mod.const_get(class_name)
end
end
end
class A
class B
end
end
p "A::B".to_class # => A::B
最佳答案
您必须自己手动“解析”冒号并在父模块/类上调用 const_get
:
ruby-1.9.1-p378 > class A
ruby-1.9.1-p378 ?> class B
ruby-1.9.1-p378 ?> end
ruby-1.9.1-p378 ?> end
=> nil
ruby-1.9.1-p378 > A.const_get 'B'
=> A::B
有人写了一个qualified_const_get
这可能很有趣。
关于ruby - 如何从 Ruby 中的字符串 "A::B::C"获取类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3314475/