Clojure - Wie mache ich mein Makro vor Systemmakros erweitern?

8

Wenn ich das tue, zum Beispiel:

%Vor%

Es schlägt fehl, weil reify % (qqq) anstelle von (toString [this] "Qqq") sieht.

Die übliche Lösung ist ein Makro, das" Anruf "mit meinem eigenen Ding umschließt, aber es ist länger und aufdringlicher.

Wie mache ich meine Makros stärker als gewöhnliche Makros, die zuerst expandiert werden sollen?

Erwartet etwas wie:

%Vor%

oder

%Vor%     
Vi. 13.02.2011, 13:53
quelle

3 Antworten

1

Das Makro, das bewirkt, dass Benutzer-Makros zuerst expandiert werden (erfordert clojure.walk ):

%Vor%

Wer hat Ideen, wie man es besser macht?

    
Vi. 13.02.2011, 21:00
quelle
7

Es gibt ein Lesemakro, um Dinge zur Lesezeit (vor der Makroexpansionszeit) auszuwerten.

%Vor%

Ich habe das nie in "echtem" Code gesehen, und ich denke, die meisten Leute würden es als Hack ansehen, aber es ist da, wenn Sie es brauchen.

    
Chris Perkins 02.03.2011 18:37
quelle
0

Das wird funktionieren:

%Vor%

Ich habe ein apply-Makro gefunden. Ich habe es versucht, aber es scheint kaputt zu sein. Das Wichtigste, was ich von apply-macro gesehen habe, war, dass es das Problem mit eval genauso gelöst hat wie ich.

    
Psyllo 15.02.2011 07:59
quelle

Tags und Links