首页 > 解决方案 > 如何通过动态接收类名来实例化类

问题描述

我需要创建一个类,但条件是,我将在字符串中收到类名,如下所示

 ["IndividualContact", "Legal"].each do |var|
      ind = var.new
    end

现在我的期望是,我需要打电话

IndividualContact.newLegal.new由于 var 是一个字符串变量,它调用.new一个字符串,如下所示

"IndividualContact".new 

而不是打电话

IndividualContact.new

有什么办法可以按我的预期打电话吗?

标签: ruby

解决方案


使用Module#const_get(假设这些类已经在全局命名空间中定义):

%w|IndividualContact Legal|.map do |klazz|
  Kernel.const_get(klazz).new
end

上面的代码将返回一个包含两个实例的数组:一个实例 ofIndividualContact和一个Legal.


推荐阅读