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)
   def b(skip)
   def c(skip)
   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"]
Show source
Register or log in to add new notes.
September 10, 2012
0 thanks

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__.