使用filename动态实例化类

时间:2014-08-21 05:44:44

标签: ruby

我的问题是,如果我在一个名为csv_writer.rb的文件中有一个CSVWriter类,那么我可以动态地使用我的文件名实例化这个类。

我确实尝试过使用Object.const_get()方法,但它将类的名称作为字符串作为参数。

所以无论如何要在ruby中做到这一点

由于

1 个答案:

答案 0 :(得分:2)

您可以使用__FILE__常量来获取文件的名称。

# foo.rb
puts __FILE__

输出

"foo.rb"

知道这一点,你可以做类似

的事情
# csv_writer.rb

class CsvWriter
  def initialize
    puts "hello"
  end
end

klass = Object.const_get(
          File::basename(__FILE__, ".rb")
            .split("_")
            .map(&:capitalize)
            .join("")
        )

klass.new

输出

"hello"

PS 没有以编程方式将csv_writer转换为CSVWriter。 ruby如何知道将csv变为CSV(全部大写),但writer仅变为Writer