在 Ruby 中获取呼叫 class 的名称

Getting the name of the calling class in Ruby

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

caller 似乎给了我一个 file/line 数字,这是 可行的 ,但似乎有点 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"

您通常通过包含 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 模块本身上调用的,这使问题进一步复杂化。