How do I get class-object from string “A::B::C” in Ruby?

后端 未结 3 1279

The following example fails

class A
  class B
  end
end
p Object.const_get \'A\' # => A
p Object.const_get \'A::B\' # => NameError: wrong constant name A::         


        
3条回答
  •  旧时难觅i
    2021-02-08 17:31

    Here is Rails' constantize method:

    def constantize(camel_cased_word)
      names = camel_cased_word.split('::')
      names.shift if names.empty? || names.first.empty?
    
      constant = Object
      names.each do |name|
        constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
      end
      constant
    end
    

    See, it starts at the Object on top of it all, then uses each name in between the double semicolons as a stepping stone to get to the constant you want.

提交回复
热议问题