代码之家  ›  专栏  ›  技术社区  ›  Rajagopalan

如何通过动态接收类名[重复]来设置类

  •  1
  • Rajagopalan  · 技术社区  · 6 年前

    我需要创建一个类,但条件是,我将接收如下所示的字符串形式的类名

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

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

    IndividualContact.new Legal.new 但是由于var是一个字符串变量,它调用 .new 在下面给出的字符串上

    "IndividualContact".new 
    

    而不是打电话

    IndividualContact.new
    

    我能按我的预期打电话吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Aleksei Matiushkin    6 年前

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

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

    上面的代码将返回一个包含两个实例的数组:一个 IndividualContact 其中之一 Legal .