在Ruby中获取调用类的名称

时间:2015-08-02 20:23:00

标签: ruby class metaprogramming mixins

我试图弄清楚如何获取在我的基于插件的应用程序中调用模块函数的类的名称。

caller似乎给了我一个文件/行号,这是可行的,但似乎有点hacky而不是惯用语。

示例代码:

module AwesomeModule
  def self.get_caller
    puts #some unknown code here
  end
end


class AwesomeClass
  def initialize
    AwesomeModule::get_caller
  end
end

a = AwesomeClass.new # ideal return => "AwesomeClass"

1 个答案:

答案 0 :(得分:2)

您通常通过包含ruby模块来使用它们。试试这个:

module AwesomeModule
  def get_caller
    self.class
  end
end

class AwesomeClass
  include AwesomeModule
  def initialize
    get_caller
  end
end

a = AwesomeClass.new #  "AwesomeClass"

另请注意,在get_caller模块本身上调用AwesomeModule问题时,问题会进一步复杂化。