ruby - 如何从 Ruby 中的字符串 "A::B::C"获取类对象?

标签 ruby class object

下面的例子失败了

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

更新

关于先前提出的主题的问题:

  1. Cast between String and Classname
  2. Ruby String#to_class
  3. Get a class by name in Ruby?

最后一个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/

相关文章:

ruby-on-rails - 如何使用 ruby​​ on Rails 创建对多项选择应用程序的投票

java - 获取和设置方法不更改数组

C++ 仅在 std::map 中初始化键

ios - 如何使用 Objective-C 创建和使用对象?

PHP - undefined offset : 0

mysql - 如何使用 `exec_insert`方法?

ruby-on-rails - Rails CSRF 保护是如何工作的?

ruby - 如何在 Ruby 中搜索 $PATH 中的可执行文件

c++ - 为什么这种前向声明方法会产生错误?

c++ - 如何在 linux 下检查 c++ .to 文件?