“新”我class级的class级名称

在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 

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

 who_made_me=caller[3].split(':')[1][4..-2] 

它的作用是获取当前堆栈,跳过字符串以进行initializeallocatenew ,然后从字符串中获取方法名称。 同样,这是完全黑客攻击,并且基于未指定的行为。 除非绝对必要,否则我不建议使用它。

一般来说,这是邪恶的。 我在C#中看到了一个等价物,但它产生了暴力的残酷副作用,更不用说丑陋的代码了。

在Ruby中,如果你真的必须这样做,你可能会从Kernel.caller开始。 但请不要这样做。