Vereinbaren Sie die verschiedenen Zitate Mechanismen in Julia Metaprogrammierung

8

Könnte jemand die verschiedenen für die Metaprogrammierung in Julia verfügbaren Quotierungsmechanismen klar darstellen und jede mit einem minimalen Beispiel illustrieren?

Damit ist klar, was in welcher Situation zu verwenden ist ...

So weit ich sehen kann, gibt es:

  • :(someExpr; maybeMore)
  • quote; ...expressions... end; , das ist fast das gleiche wie oben nur mit Zeilennummern für Debug-Zwecke
  • Expr(:quote, x) was ( gemäß @totalverb ) entspricht Meta.quot(x)
  • QuoteNode die ( laut Jeff Bezanson ) "wird nur in der interne AST-Darstellung, nicht durch Makros. Es ist sicher zu ignorieren , wenn Sie nicht an späteren Phasen des Compilers arbeiten. "

Ist diese Liste umfassend? Vermeide ich irgendwelche alternativen Darstellungen?

    
P i 11.12.2016, 17:35
quelle

1 Antwort

7

:... ist der Standard-Quotierungsmechanismus. Es analysiert einen Ausdruck und gibt den AST zurück.

%Vor%

eval(:<expr>) sollte dasselbe wie nur <expr> zurückgeben (angenommen <expr> ist ein gültiger Ausdruck im aktuellen globalen Bereich)

%Vor%

quote ... end ist dasselbe wie :(begin ... end)

Expr(:quote, x) wird verwendet, um Anführungszeichen in Anführungszeichen darzustellen.

%Vor%

QuoteNode(x) ist ähnlich wie Expr(:quote, x) , verhindert jedoch die Interpolation.

%Vor%

Hier ist ein Makro, das alle verwendet:

%Vor%

Verwendung:

%Vor%

Bearbeiten : Meta.quot(x) ist in der Tat dasselbe wie Expr(:quote, x) . Es ist nicht dokumentiert und nirgends erwähnt, aber es war eine bewusste Ergänzung zu den Funktionen, die von Base ( Ссылка ) und ich habe keine Pläne gesehen, es abzulehnen, also können Sie es benutzen.

    
phicr 12.12.2016, 14:26
quelle