"新"我班级的班级名称

Lor*_*ner 2 ruby

在Ruby中,有没有办法获取创建MyClass实例的类的名称?

我知道我可以将它作为参数传递给我的初始化方法,但我想知道是否有任何数据已经存在与在MyClass一侧创建MyClass实例的类有关.

所以它会是这样的

class MyClass
  def initialize
    @who_called_me = who_called_me.name
  end

  def who_called_me
    puts @who_called_me
  end
end 
Run Code Online (Sandbox Code Playgroud)

Lin*_*ios 5

虽然这在实现和版本之间不可移植,但这是一个粗略的解决方案:

who_made_me=caller[3].split(':')[1][4..-2]
Run Code Online (Sandbox Code Playgroud)

这样做是它得到当前栈,跳过了琴弦initialize,allocatenew,然后获取方法名出字符串的.同样,这是完全黑客攻击,并且基于未指定的行为.除非绝对必要,否则我不建议使用它.