Ich möchte testen können, ob eine Variable definiert ist, bevor Sie darauf zugreifen.Wie teste ich, ob eine Variable definiert ist, bevor Sie sie referenzieren?
Ich mag eine globale, die eine "Debug-Ebene" angibt. Wenn der Debug-Level 0 ist, wird keine zusätzliche Ausgabe ausgegeben. Wenn größer als 1, wird Debug-Ausgabe gegeben, mit mehr Ausführlichkeit bei größeren Zahlen.
Ich würde auch gerne einrichten, so dass die Verfahren laufen würden, und eine Stufe 0 annehmen, wenn ich nicht dazu gekommen wäre, sie zu definieren. Etwas wie:?.. (Wo defined?
die Magie ist, weiß ich nicht, wie zu tun
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
Ich habe in The Scheme Programming Language, 4th Edition durch die Zusammenfassung von Formen sah die einzige, die ich sah, als eine Möglichkeit, identifier?
war es tat . nicht funktionieren
ich 1.16.6 SISC bin mit (Ansprüche R5RS Compliance) und v8 Petite Scheme Chez (behauptet R6RS Compliance)
EDIT ich eval
mit einem guard
wie versucht Verpackung:
Da 'debug-level
angegeben ist, kann es ausgewertet und an eval
übergeben werden. Dann, wenn eval
versucht, es auszuwerten, würde ein Fehler passieren, den ich gehofft hatte guard
würde fangen. Es tat es nicht.
EDIT 2 Ich erkannte, dass ich die Debug-Tracing in einem separaten Verfahren und dass die Datei, die definiert, dass dieses Verfahren können auch definieren debug-level
mit einem Standardwert von 0. Die Gründe für die Verwendung eines separaten Verfahrens senken wickeln wollte die Anzahl der Zeilen in den Prozeduren, die funktionieren, und auch die Umleitung der Debug-Ausgabe bei Bedarf zu ermöglichen.
Danke. Ich hatte Angst, dass die Antwort nicht weit tragbar wäre, dass es entweder etwas Neues in R6RS oder eine Implementierung wäre. +1, aber ich werde diese Antwort etwas altern lassen, um zu sehen, ob irgendwelche besseren Ideen gepostet werden, bevor sie als korrekt akzeptiert werden. –