Geschweifte Klammern in Rust: Wie Sie { und } in format! fehlerfrei ausgeben

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum mag Rust keine geschweiften Klammern?

\n\n

Wenn Sie jemals in Rust programmiert und versucht haben, etwas wie { "name": "Rust" } mit println! auszugeben, haben Sie sicherlich Folgendes gesehen:

\n\n
println!("{ "name": "Rust" }"); // Kompilierungsfehler!
\n\n

Der Compiler meldet schadenfroh: "invalid reference to argument 'name' — no argument named 'name' found". Und Sie stehen ratlos da: Wie gibt man geschweifte Klammern in einem String aus? In Python macht man das mit {{ }}, aber dort ist alles einfacher. Rust hat seine eigene Philosophie: Geschweifte Klammern sind nicht nur Symbole, sondern Teil eines mächtigen Formatierungssystems, das von Python übernommen wurde, jedoch mit Nuancen.

\n\n

In diesem Artikel behandeln wir alle Methoden zur Maskierung geschweifter Klammern in Rust: von der grundlegenden {{ }}-Methode bis hin zu Tricks mit Debug und raw string literals. Sie erfahren, wie Sie JSON ausgeben, Code generieren und mit Vorlagen arbeiten, ohne in die Fallstricke des Compilers zu geraten.

\n\n

Warum sind geschweifte Klammern besonders?

\n\n

In Rust verwenden die Makros format!, println!, write! und format_args! geschweifte Klammern als Platzhalter-Markierungen. Zum Beispiel:

\n\n
let name = "Rust";\nprintln!("Hallo, {}!", name); // Hallo, Rust!
\n\n

Hier ist {} ein Platzhalter, der durch den Wert der Variablen ersetzt wird. Aber was ist, wenn Sie das Zeichen { oder } selbst benötigen? Rust verwendet einen einfachen Trick: Verdopplung der Klammern.

\n\n

Methode 1: Klassische Verdopplung mit {{ und }}

\n\n

Der einfachste und offensichtlichste Weg ist, zwei geschweifte Klammern hintereinander zu schreiben. Das erste Paar {{ wird zu einer einzelnen {, und }} wird zu einer einzelnen }.

\n\n

Beispiel 1: Einfache Maskierung

\n
fn main() {\n    let text = format!("Funktion main() {{ ... }}");\n    println!("{}", text);\n    // Ausgabe: Funktion main() { ... }\n}
\n\n

Beispiel 2: Maskierung mit Platzhaltern

\n
fn main() {\n    let lang = "Rust";\n    let year = 2015;\n    let result = format!("{{ \\"lang\\": \\"{}\\", \\"year\\": {} }}", lang, year);\n    println!("{}", result);\n    // Ausgabe: { "lang": "Rust", "year": 2015 }\n}
\n\n

Diese Methode funktioniert überall: in println!, write!, format!. Merken Sie sich die Regel: zwei Klammern = eine Klammer.

\n\n

Methode 2: Benannte Argumente und Maskierung

\n\n

Wenn Sie benannte Argumente verwenden (z. B. {name}), funktioniert die Maskierung ebenfalls, aber Sie müssen auf die Position der Klammern achten.

\n\n

Beispiel 3: Benannte Platzhalter und Klammern

\n
fn main() {\n    let user = "Alice";\n    // Wir möchten ausgeben: Hallo, {Alice}!\n    println!("Hallo, {{{}}}!", user);\n    // Ausgabe: Hallo, {Alice}!\n}
\n\n

Analysieren wir den String "Hallo, {{{}}}!":\n

    \n
  • {{ → gibt { aus
  • \n
  • {} → setzt user ein
  • \n
  • }} → gibt } aus
  • \n
\n

\n\n

Wichtig: Die Anzahl der Klammern ist für die Maskierung immer gerade. Wenn Sie {{{ haben, ist das ein Fehler, da drei Klammern kein korrektes Paar bilden.

\n\n

Methode 3: Verwendung des Debug-Formats ({:?})

\n\n

Manchmal möchten Sie eine Datenstruktur so ausgeben, dass sie automatisch mit geschweiften Klammern dargestellt wird. Zum Beispiel beim Debuggen oder bei der JSON-Generierung.

\n\n

Beispiel 4: Ausgabe einer Struktur mit Debug

\n
#[derive(Debug)]\nstruct Point {\n    x: i32,\n    y: i32,\n}\n\nfn main() {\n    let p = Point { x: 10, y: 20 };\n    println!("{:?}", p);\n    // Ausgabe: Point { x: 10, y: 20 }\n}
\n\n

Das Debug-Trait fügt selbst Klammern um die Felder hinzu. Das ist praktisch, wenn Sie schnell den Zustand eines Objekts anzeigen möchten. Aber wenn Sie genau JSON oder eine andere

Blogs

Buchempfehlungen