具有以下代码段:
class Foo
def initialize
puts self.class
end
end
class Bar < Foo
def bark
puts self.class
end
end
class Fizz < Bar
end
Fizz.new.bark
此代码段将输出两次Fizz
(live example)。我想找到一些替换self.class
的东西,它允许该程序输出Foo
(来自初始化),然后输出Bar
(来自树皮)。
我当前的解决方案是对函数名称进行硬编码,但是我想提供一些动态的东西。
答案 0 :(得分:4)
这有效。 (不过,可能有更好的方法。)
class Foo
def initialize
puts method(__callee__).owner
end
end
class Bar < Foo
def bark
puts method(__callee__).owner
end
end
class Fizz < Bar
end
Fizz.new.bark
# >> Foo
# >> Bar