Method: Kernel#caller

Defined in:
vm_eval.c

- (Array?) caller(start = 1)

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.

Returns nil if start is greater than the size of current execution stack.

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:in `<main>'"]
c(1)   #=> ["prog:5:in `b'", "prog:8:in `c'", "prog:11:in `<main>'"]
c(2)   #=> ["prog:8:in `c'", "prog:12:in `<main>'"]
c(3)   #=> ["prog:13:in `<main>'"]
c(4)   #=> []
c(5)   #=> nil

Returns:



# File 'vm_eval.c'

static VALUE
rb_f_caller(int argc, VALUE *argv)
{
    VALUE level;
    int lev;

    rb_scan_args(argc, argv, "01", &level);

    if (NIL_P(level))
    lev = 1;
    else
    lev = NUM2INT(level);
    if (lev < 0)
    rb_raise(rb_eArgError, "negative level (%d)", lev);

    return vm_backtrace(GET_THREAD(), lev);
}

Comments