Como obter nomes de argumentos usando reflexão

Gostaria de fazer uma reflexão bastante pesada em Ruby. Eu quero criar uma função que retorne os nomes dos argumentos de várias funções de chamada mais altas na pilha de chamadas (apenas uma maior seria suficiente, mas por que parar aí?). Eu poderia usarKernel.caller, vá para o arquivo e analise a lista de argumentos, mas isso seria feio e não confiáve

A função que eu gostaria funcionaria da seguinte maneira:

module A
  def method1( tuti, fruity) 
    foo
  end
  def method2(bim, bam, boom)  
    foo
  end
  def foo
    print caller_args[1].join(",") #the "1" mean one step up the call stack
  end

end

A.method1
 #prints "tuti,fruity"
A.method2
 #prints "bim, bam, boom"

Eu não me importaria de usar ParseTree ou alguma ferramenta semelhante para esta tarefa, mas olhando para o Parsetree, não é óbvio como usá-lo para esse fim. Criando uma extensão C comoist é outra possibilidade, mas seria bom se alguém já tivesse feito isso por mim.

Posso ver que provavelmente vou precisar de algum tipo de extensão C. Suponho que isso signifique que minha pergunta é qual combinação de extensão C funcionaria mais facilmente. Eu não acho que o chamador + ParseTree seria suficiente por si só.

Na medida em que eu gostaria de fazer isso, em vez de dizer "depuração automática", talvez eu devesse dizer que gostaria de usar essa funcionalidade para verificar automaticamente as condições de chamada e retorno das funções:

def add x, y 
  check_positive
  return x + y
end

Ondecheck_positive lançaria uma exceção sex ey não foram positivos. Obviamente, haveria mais do que isso, mas espero que isso dê motivação suficiente.

questionAnswers(5)

yourAnswerToTheQuestion