caller
caller(...)
public
Returns the current execution stack—an array containing strings in the form “file:line” or “file:line: in `method”‘. The optional start parameter determines the number of initial stack entries to omit from the result.
def a(skip) caller(skip) end def b(skip) a(skip) end def c(skip) b(skip) end c(0) #=> ["prog:2:in `a'", "prog:5:in `b'", "prog:8:in `c'", "prog:10"] c(1) #=> ["prog:5:in `b'", "prog:8:in `c'", "prog:11"] c(2) #=> ["prog:8:in `c'", "prog:12"] c(3) #=> ["prog:13"]
Reports originally defined method names, not invoked names in Ruby 1.9.x
In Ruby 1.8.7, the reported method names were those of the methods actually invoked, so if #b was an alias for #a, and #b was called, it would be reported as “… in `b’”. In Ruby 1.9, the same invocation is now reported as “… in `a’”.
Unfortunately, this change disables the hack that could formerly be used to create a variant of __method__ that returns the method as actually invoked. The new __callee__ method is no help with that, because it is currently synonymous with __method__.