Macros

Macros #

In Rust existieren zwei Typen von Macros:

Declarative Macros #

Werden mit dem macro_rules!-Makro definiert: macro_rules! test { () => {} }

Dieses Macro macht zwar noch gar nichts, doch zeigt es schon alle wichtigen Bestandteile eines deklarativen Makros:

  • macro_rules!
  • Name des Makros (hier test)
  • Pattern matching in geschweiften Klammern, wobei
    • () der Matcher und
    • {} der Transcriber ist

Der Matcher besteht üblicherweise aus zwei Teilen,

  • einem Namen, der im Transcriber gebunden wird, und der immer mit $ anfangen muss, und, durch ein : getrennt,
  • ein Designator, welcher den Typ definiert, den es zu matchen gilt.

Designators #

Type Matches Allowed suffixes
expr Expression => , ;
stmt Expression / declaration, not including any trailing semicolon => , ;
ty Type => , ; = | { [ : > as where
path Path => , ; = | { [ : > as where
pat Pattern => , = | if in
item Item Anything
block Block Anything
meta Body of an attribute Anything
ident Identifier Anything
tt Token tree Anything

Procedural Macros #

Ressourcen #

“Offizielle” Ressourcen:

Sonstige: