Makro, um während der Laufzeit auf den Quelltext zuzugreifen

8

Gibt es bereits oder ist es möglich, ein Scala-Makro zu haben, das mir Zugriff auf den Text der Quelle gibt? Zum Beispiel möchte ich Code wie folgt schreiben:

%Vor%     
huynhjl 12.04.2013, 13:16
quelle

2 Antworten

8

Möchten Sie wirklich einen Quellcode oder Tree ist genug?

Für Tree könnten Sie prefix von Context wie folgt verwenden:

%Vor%

Verwendung:

%Vor%     
senia 12.04.2013, 14:01
quelle
1

Ich konnte withSource nicht direkt verwenden, um nur die Quelle und den Wert zu drucken und den Wert zurückzugeben. Das Makro withSource kann nicht vom selben Objekt selbst verwendet werden (ich kann also nicht einfach meine leicht modifizierte Version von withSource in dieser Datei hinzufügen) und ich kann withSource nicht von einer Unterklasse von WithSourceHelper aufrufen, was die Wiederverwendung einschränkt durch Vererbung.

Falls jemand interessiert ist, ist hier eine Ergänzung zu Senias Antwort, den Wert einfach mit der Quelle zu protokollieren und den Wert zurückzugeben, damit der Rest der Berechnung stattfinden kann.

%Vor%

Ich definiere es dann als implizite Konvertierung für def p = macro Debug.logValueImpl[T] . Ich kann dann so verwenden:

%Vor%

Der lustige Teil ist, dass ich es zweimal anwenden kann:

%Vor%

Und es zeigt mir, was das Makro logValueImpl gemacht hat:

%Vor%

Es scheint auch mit anderen Makros zu funktionieren:

%Vor%

Noch interessanter, wenn ich showRaw anstelle von show verwende, kann ich sogar den Baum des erweiterten Makros sehen, was nützlich sein könnte, um herauszufinden, wie man andere Makros schreibt.

    
huynhjl 16.04.2013 07:58
quelle

Tags und Links