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

从字符串初始化

  •  2
  • Sirupsen  · 技术社区  · 16 年前

    假设我有一个名为 克拉斯 和一个名为 KLASS2 . 根据用户的输入,我想决定是否打电话 "hello_world" 在Klass或Klass2上:

    class Klass
      def self.hello_world
        "Hello World from Klass1!"
      end
    end
    
    class Klass2
      def self.hello_world
        "Hello World from Klass2!"
      end
    end
    
    input = gets.strip
    class_to_use = input
    puts class_to_use.send :hello_world
    

    用户输入“klass2”,脚本应该说:

    你好,来自克拉斯的世界2!

    很明显,这个代码不起作用,因为我打电话来 #hello_world 但我想打电话给 爱的世界 Klass2 .

    我该怎么办 “转换” 字符串引用到 KLASS2 (或者用户可能输入的内容),或者我如何才能实现这种行为?

    3 回复  |  直到 16 年前
        1
  •  11
  •   Jörg W Mittag    16 年前
    puts Object.const_get(class_to_use).hello_world
    
        2
  •  1
  •   Ju Nogueira    16 年前
    puts eval(class_to_use).hello_world
    
        3
  •  1
  •   severin    16 年前

    如果已加载ActiveSupport(例如在Rails应用程序中),也可以使用Constantize:

    class_to_use.constantize.hello_world
    
    推荐文章