caller

La llamada:

caller(skip = 1)

retorna un array de cadenas con el formato

“file:line” o “file:line: in `method”‘
El parámetro opcional indica el número de pilas iniciales a saltarse.

Retorna nil si el numero de las que te saltas es mayor que el número de llamadas en la pila.

Ejemplo:

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ cat -n ex0683.rb 
     1  def cat_a
     2    puts caller.join("\n")
     3  end
     4  def cat_b
     5    cat_a
     6  end
     7  def cat_c
     8    cat_b
     9  end
    10  cat_c

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ ruby ex0683.rb 
ex0683.rb:5:in `cat_b'
ex0683.rb:8:in `cat_c'
ex0683.rb:10

Veamos un ejemplo mas completo:

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ cat -n caller.rb 
     1  def a(skip)
     2    caller(skip)
     3  end
     4  def b(skip)
     5    a(skip)
     6  end
     7  def c(skip)
     8    b(skip)
     9  end
    10  puts c(0).inspect   
    11  puts c(1).inspect   
    12  puts c(2).inspect   
    13  puts c(3).inspect   
    14  puts c(4).inspect   
    15  puts c(5).inspect

~/rubytesting/programmingRuby/src_of_programming_ruby_by_dave_thomas$ ruby caller.rb 
["caller.rb:2:in `a'", "caller.rb:5:in `b'", "caller.rb:8:in `c'", "caller.rb:10"]
["caller.rb:5:in `b'", "caller.rb:8:in `c'", "caller.rb:11"]
["caller.rb:8:in `c'", "caller.rb:12"]
["caller.rb:13"]
[]
nil



Casiano Rodriguez León 2015-01-07