Existe-t-il un moyen en Ruby de trouver le nom de la méthode appelante à l'intérieur d'une méthode ?
Par exemple :
class Test
def self.foo
Fooz.bar
end
end
class Fooz
def self.bar
# get Test.foo or foo
end
end
Existe-t-il un moyen en Ruby de trouver le nom de la méthode appelante à l'intérieur d'une méthode ?
Par exemple :
class Test
def self.foo
Fooz.bar
end
end
class Fooz
def self.bar
# get Test.foo or foo
end
end
Cela donne le nom de la méthode appelante, mais cela ne donne aucune indication sur le module ou la classe auquel la méthode appartient. Est-ce possible ?
@thomthom Oui, c'est possible, vous pouvez appeler self.class.name pour voir le nom de la classe.
Dans Ruby 2.0.0, vous pouvez utiliser :
caller_locations(1,1)[0].label
C'est beaucoup plus rapide que la solution Ruby 1.8+ :
caller[0][/`([^']*)'/, 1]
Sera inclus dans backports
quand j'en aurai le temps (ou une demande de retrait !).
Si vous utilisez pry, vous devez ignorer le stacktrace de pry... il ne semble pas y avoir de solution par défaut pour cela.
Maintenant, il semble être caller_locations[0].label
sur Ruby 2.2.0 sinon vous avez toujours send_action
résultat
C'est incorrect, cela renvoie la méthode courante, et non la méthode qui a appelé la méthode courante...
Plus propre et plus précis. Plutôt que d'effectuer la recherche, puis d'utiliser une méthode de tableau pour séparer les caractères indésirables en fonction de leur position (ce qui peut être incorrect).
Pourquoi ne pas utiliser simplement caller[0][/`(.*)'/, 1] ? Je ne suis pas un gourou des expressions régulières, mais cela semble fonctionner.
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.
1 votes
Duplication possible de Obtenir le nom de la méthode en cours d'exécution en Ruby
0 votes
Obtenir l'objet appelant : stackoverflow.com/questions/2703136/
5 votes
Il ne s'agit pas d'un doublon de "Get the name of the currently executed method in Ruby". Cette question demande le nom de la méthode appelante, pas le nom de la méthode en cours.