Ich habe eine ziemlich komplexe Anwendung mit Racket (früher PLT Scheme) erstellt und möchte eine REPL für Debugging-Zwecke hinzufügen. Ich habe versucht, es über einen TCP-Stream zugänglich zu machen:
%Vor% (Try name result-if-exception form)
ist ein Makro, das grundlegende Ausnahmebehandlung bereitstellt, (log ...) und (display-and-log ...) tun, wie sie klingen.
Wenn ich jetzt auf die REPL zugreife, kann ich nicht einmal Konstanten auswerten, da ich immer den Fehler compile: unbound identifier (and no #%app syntax transformer is bound) at: #%top-interaction
bekomme. Wie kann ich diese REPL arbeiten lassen? Und wie kann ich auf Werte define
d zugreifen, bevor ich den REPL-Server starte?
Sie verwenden read-eval-print-loop
, was im Wesentlichen dasselbe ist wie die Verwendung von eval
und daher die gleichen Probleme verursacht. Eine ausführliche Erklärung finden Sie im relevanten Leitfaden . Es ist am besten, das vollständig zu lesen, aber die Antworten, nach denen Sie suchen, sind entweder der Abschnitt "Namespaces" oder der Abschnitt "Namespaces and Modules" - der erste ist, wenn Sie eine Toplevel-Art eines Namespace wollen Der zweite ist, wenn Sie einen Namespace haben möchten, der der tatsächlichen Datei entspricht, in der der Code erscheint. (Der erste ist normalerweise besser - wenn Sie zum Beispiel den zweiten verwenden, steht repl-server
selbst für den REPL-Benutzer zur Verfügung ein fragwürdiges Feature ...)
So würde es aussehen:
%Vor% und für die zweite, definieren Sie einen Anker und verwenden Sie namespace-anchor->namespace
, wie das letzte Beispiel auf dieser Seite zeigt.
[BTW, siehe auch run-server
etwas, es ist ein bisschen alt, aber kann immer noch nützlich sein.]
Tags und Links read-eval-print-loop eval scheme racket