Ich möchte in Ruby einige ziemlich strikte Überlegungen anstellen. Ich möchte eine Funktion erstellen, die die Namen der Argumente der verschiedenen aufrufenden Funktionen höher auf dem Call-Stack zurückgibt (nur eine höhere wäre genug, aber warum dort aufhören?). Ich könnte Kernel.caller
verwenden, zu der Datei gehen und die Argumentliste parsen, aber das wäre hässlich und unzuverlässig.So erhalten Sie Argumentnamen mit Hilfe der Reflektion
Die Funktion, die ich in der folgenden Art und Weise funktionieren würde, würde:
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"
ich mit nicht aber bei Syntaxbaum suchte dagegen ParseTree oder ein ähnliches Werkzeug für diese Aufgabe, ist es nicht klar, wie es zu benutzen für diesen Zweck. Das Erstellen einer C-Erweiterung wie this ist eine andere Möglichkeit, aber es wäre schön, wenn jemand es schon für mich getan hätte.
Ich kann sehen, dass ich wahrscheinlich eine Art C-Erweiterung benötigen werde. Ich vermute, das bedeutet meine Frage ist, welche Kombination von C-Erweiterung würde am einfachsten funktionieren. Ich glaube nicht, dass Caller + ParseTree alleine ausreichen würde.
Soweit ich das gerne tun würde, anstatt zu sagen "automatisches Debugging", sollte ich vielleicht sagen, dass ich diese Funktionalität nutzen möchte, um die Aufruf- und Rückgabebedingungen von Funktionen automatisch zu überprüfen:
def add x, y
check_positive
return x + y
end
Wo check_positive
eine Ausnahme auslösen würde, wenn x
und y
nicht positiv waren. Natürlich würde es mehr geben als das, aber hoffentlich gibt das genug Motivation.
Es sieht aus wie Sie Ausführungsreihenfolge und Argumente bestimmen wollen. Gibt es einen Grund, warum Sie die Protokollierung nicht verwenden können? Sie könnten wahrscheinlich sogar eine Metaprogrammierung durchführen, um alle Methoden in der Klasse zu öffnen und automatisch die Argumente zu protokollieren, um das zu tun, was Sie wollen. – runako