Die an den Makro übergebene Variable wird im falschen Namensraum aufgelöst?

8

Das Noir Makro defpage gibt mir ein bisschen Ärger. Ich versuche, einen Anruf ähnlich wie folgt zu erstellen:

%Vor%

Anstatt jedoch das Schlüsselwort :post zu verwenden, möchte ich eine Variable wie folgt verwenden:

%Vor%

Das Problem ist, dass wenn das Makro expandiert, es die Variable my-method im Namespace compojure.core statt meiner eigenen auflösen will und mir den Fehler gibt:

%Vor%

Wie kann ich my-method im aktuellen Kontext auflösen?

    
benekastah 03.12.2011, 23:21
quelle

4 Antworten

1

Ich denke, das ist ein ähnliches Problem zu: Wie kann ich die doc-Funktion von clojure auf eine Reihe von Funktionen anwenden Ein Makro kann mit seinen Argumenten alles machen, was es will, also kann das Übergeben eines nackten Symbols zu unvorhersehbaren Ergebnissen führen.

Ein Weg, es zu lösen, aber es ist nicht schön:

%Vor%

Beachten Sie, dass meine Methode hier kein Literal ist, daher wird sie zunächst in unserem eigenen Namespace aufgelöst und ausgewertet, bevor Sie in eval gehen.

    
Michiel Borkent 04.12.2011, 08:54
quelle
1

Es scheint, dass noir nicht so verwendet werden soll, weil es das Argument method verwendet und es in das Symbol in compojure.core umwandelt (siehe Ссылка ). Es bedeutet, dass es keine Variable an diesem Ort erwartet, nur Literale. Also ich glaube nicht, dass Sie etwas dagegen tun können, außer ein Problem an noir zu posten ...

    
Vsevolod Dyomkin 04.12.2011 08:52
quelle
1

Wenn wir die Datei noir / core.clj durchgehen ( Quelle ) , finde parse-route-Funktion und begründe das, was sie mit ihrem method -Argument tut (dort heißt Aktion), könnten wir herausfinden, dass das Schlüsselwort method in string, in Großbuchstaben umgewandelt und in compojure.core-Namespace aufgelöst wird. All dies wird während der Makroerweiterungszeit durchgeführt. Daher ist es nicht möglich, eine Variable anstelle eines Schlüsselworts zu verwenden, ohne den Code zu ändern.

    
Vladimir Matveev 04.12.2011 09:02
quelle
0

Was ist mit der Weitergabe der my-Methode zusammen mit dem Namespace?

%Vor%     
Ankur 04.12.2011 08:51
quelle

Tags und Links