8 votes

Comment trouver les dépendances d'une méthode Ruby ?

Existe-t-il un moyen d'obtenir la liste des méthodes qui implémentent une méthode Ruby lorsqu'elle est invoquée ?

Par exemple :

def foo
  puts "foo"
end

def foo2
  foo
end

Je veux savoir que lorsque j'appelle "foo2", cela appelle d'abord "foo" et ensuite "puts" et les fichiers correspondants dans lesquels ces méthodes sont définies. (Si "puts" appelle d'autres méthodes, je voudrais aussi les connaître)

Est-ce possible ? Et si oui, comment ? Je pourrais dire que ma question concerne la recherche des dépendances des méthodes.

4voto

Tomasz Stachewicz Points 124

L'analyse de code statique, en particulier celle que vous aimeriez effectuer (énumérant toutes les méthodes appelées à l'intérieur d'une méthode), est très difficile en ruby (presque impossible) car le langage est dynamique et permet des techniques de méta-programmation très avancées. Même l'analyseur lui-même ne sait pas quelles méthodes sont nécessaires avant d'essayer d'exécuter le code.

Exemple : appeler eval avec du code lu depuis un fichier.

4voto

Max Points 5042

Vous pouvez utiliser set_trace_func pour obtenir cela, mais comme Ruby est dynamique, vous aurez également besoin de code de test pour appeler les méthodes afin d'imprimer l'ordre d'appel.

set_trace_func proc { |event, filename, line, id, binding, klass| puts "#{klass}##{id}" }

En Ruby 2.0, TracePoint est une alternative supérieure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X