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

后端 未结 3 1374

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条回答
  •  南旧
    南旧 (楼主)
    2021-02-08 17:09

    You'll have to manually "parse" the colons yourself and call const_get on the parent module/class:

    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 
    

    Someone has written a qualified_const_get that may be of interest.

提交回复
热议问题