在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
答案 0 :(得分:5)
虽然这在实现和版本之间不可移植,但这是一个粗略的解决方案:
who_made_me=caller[3].split(':')[1][4..-2]
它的作用是获取当前堆栈,跳过initialize
,allocate
和new
的字符串,然后从字符串中获取方法名称。同样,这是完全黑客攻击,并且基于未指定的行为。我建议不要使用此项,除非绝对必要。
答案 1 :(得分:1)
一般来说,这是邪恶的。我在C#中看到了相同的东西,但它产生了暴力的残酷副作用,更不用说丑陋的代码了。
在Ruby中,如果你真的必须这样做,你可能会从Kernel.caller开始。但请不要这样做。