Was ist der r#""# - operator in Rust?
Sah ich die Betreiber r#""
in Rust, aber ich kann nicht finden, was es tut. Es kam in handliches für die Erstellung von JSON:
let var1 = "test1";
let json = r#"{"type": "type1", "type2": var1}"#;
println!("{}", json) //=> {"type2": "type1", "type2": var1}
Was ist der name des Betreibers r#""
? Wie mache ich var1
bewerten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hat zu tun mit string-literalen und raw-strings. Ich denke, es erklärt sich ziemlich gut in dieser Teil der Dokumentation, in der code-block, der gebucht wird, da kann man sehen, was es tut:
Es negiert die Notwendigkeit, spezielle escape-Zeichen innerhalb der Zeichenfolge.
Den
r
- Zeichen am Anfang einer Zeichenfolge literal bezeichnet eine raw-string-Literale. Es ist kein Betreiber, sondern ein Präfix.In ein normales string-literal, es gibt einige Zeichen, die Sie benötigen, zu entkommen, um die Zeichenfolge, wie
"
und\
. Die"
Zeichen muss maskiert werden, da es sonst die Zeichenkette beenden, und die\
muss escaped werden, da es das escape-Zeichen.Im raw-string-Literale, können Sie eine beliebige Anzahl von
#
Symbole zwischen denr
und die öffnung"
. Zum schließen der raw-string-Literale, müssen Sie eine Schließung"
, gefolgt von der gleichen Anzahl von#
Zeichen, da es an den start. Mit null oder mehr#
Zeichen können Sie setzen, wörtliche\
Zeichen in der Zeichenfolge (\
Zeichen haben keine Besondere Bedeutung). Mit einem oder mehreren#
Zeichen können Sie setzen, wörtliche"
Zeichen in der Zeichenfolge. Wenn Sie eine"
gefolgt von einer Sequenz von#
Zeichen in der Zeichenfolge, verwenden Sie einfach die gleiche Anzahl von#
Zeichen plus eine zum begrenzen der Zeichenkette. Zum Beispiel:r##"foo #"# bar"##
stellt die Zeichenfolgefoo #"# bar
. Die wörtliche hört nicht auf das Zitat in der Mitte, weil es nur gefolgt von einem#
, in der Erwägung, dass die wörtliche gestartet wurde mit zwei#
.Antwort den letzten Teil Ihrer Frage, es gibt keinen Weg, um ein string-literal ausgewertet Variablen im aktuellen scope. Einige Sprachen, wie PHP, Unterstützung, aber nicht Rosten. Sollten Sie mithilfe der
format!
makro statt. Beachten Sie, dass für JSON, werden Sie noch brauchen, um doppelte Klammern, auch in einem raw-string-literal zu, da der string interpretiert, der durch das makro.Wenn Sie brauchen, um erzeugen eine Menge von JSON, es gibt viele Kisten, die machen es einfacher für Sie. Insbesondere mit
serde_json
, können Sie festlegen, regelmäßige Rost Strukturen oder Enumerationen, und haben Sie automatisch serialisiert zu JSON.Das erste mal sah ich diese komische Schreibweise ist in glium tutorials (alte Kiste für Grafik-management) und verwendet wird, zu "Kapseln" und pass GLSL-code (GL Shading language) zu Shader der GPU
https://github.com/glium/glium/blob/master/book/tuto-02-triangle.md
Soweit ich das verstanden habe, sieht es aus wie der Inhalt von r#...# bleibt unverändert, es ist nicht in irgendeiner Weise interpretiert. Daher raw string.