Wie debugge ich Rubys method_missing? - Ruby, Debugging, Metaprogrammierung

Lass mich das ein bisschen klären ...

Ich habe eine Klasse, die XML-Dateien verarbeitet. Diese Klasse implementiert method_missing und verwendet die Methode, die als Bezeichner eines Tags übergeben wurde, und gibt dann ein Objekt zurück, das den XML-Knoten für dieses Tag darstellt. Der Code ist mehr oder weniger so:

def method_missing(m, *args, &block)
XmlNode.new(@xml.at_css(m.to_s.upcase))
end

Ich habe etwas komisches gemacht, und manchmal auch das m Parameter wird nicht zum Methodenaufruf gesendet.

Gibt es eine Möglichkeit für mich herauszufinden, welcher der Anrufe der Schuldige ist?

Eine Möglichkeit, an die ich denken kann, ist, den Methodenaufruf selbst zu protokollieren, aber wie mache ich das innerhalb von method_missing?

Antworten:

1 für die Antwort № 1

Ein sehr primitiver Weg wäre, den Call-Stack durch Putting auszugeben

puts caller

direkt über Ihrer XmlNode ... Zeile. Dadurch wird der Aufrufstapel ausgegeben und Sie können sehen, wer die Methode aufgerufen hat.


Am beliebtesten