Wie verkette ich die folgenden Typenkombinationen:
str
undstr
String
undstr
String
undString
string
rust
string-concatenation
jsalter
quelle
quelle
str
und&str
sind verschiedene Typen und für 99% der Zeit, sollten Sie nur kümmern uns um&str
. Es gibt andere Fragen, die die Unterschiede zwischen ihnen detailliert beschreiben.Antworten:
Wenn Sie Zeichenfolgen verketten, müssen Sie Speicher zuweisen, um das Ergebnis zu speichern. Am einfachsten ist
String
und&str
:Hier haben wir eine eigene Zeichenfolge, die wir mutieren können. Dies ist effizient, da wir möglicherweise die Speicherzuordnung wiederverwenden können. Es gibt einen ähnlichen Fall für
String
undString
, wie&String
dereferenziert werden kann als&str
.Danach
another_owned_string
bleibt unberührt (keinmut
Qualifier beachten ). Es gibt eine weitere Variante , die verbraucht dieString
aber nicht erfordert es wandelbar zu sein. Dies ist eine Implementierung desAdd
Merkmals , das aString
als linke Seite und a&str
als rechte Seite nimmt:Beachten Sie, dass
owned_string
nach dem Anruf an nicht mehr darauf zugegriffen werden kann+
.Was wäre, wenn wir eine neue Saite produzieren wollten, die beide unberührt ließ? Der einfachste Weg ist zu verwenden
format!
:Beachten Sie, dass beide Eingabevariablen unveränderlich sind, sodass wir wissen, dass sie nicht berührt werden. Wenn wir das Gleiche für eine beliebige Kombination von tun wollten
String
, können wir die Tatsache nutzen, dassString
auch formatiert werden kann:Sie müssen nicht haben zu verwenden ,
format!
, though. Sie können eine Zeichenfolge klonen und die andere Zeichenfolge an die neue Zeichenfolge anhängen:Hinweis - Alle von mir erstellten Typspezifikationen sind redundant. Der Compiler kann auf alle hier verwendeten Typen schließen. Ich habe sie einfach hinzugefügt, um Leuten, die neu bei Rust sind, klar zu sein, da ich erwarte, dass diese Frage bei dieser Gruppe beliebt ist!
quelle
Add
/+
symbol? Sie könnten es abdecken, wenn Sie wollen..to_owned()
und.to_string()
seit dem obigen Kommentar dank impl Spezialisierung behoben wurde. Beide haben jetzt die gleiche Leistung, wenn sie auf a gerufen werden&str
. Relevantes Commit: github.com/rust-lang/rust/pull/32586/filesEs gibt verschiedene Möglichkeiten, mehrere Zeichenfolgen zu einer einzelnen Zeichenfolge zu verketten, die durch ein anderes Zeichen getrennt sind.
Das Schönste, was ich gesehen habe, ist die Verwendung der
join
Methode für ein Array:Abhängig von Ihrem Anwendungsfall bevorzugen Sie möglicherweise auch mehr Kontrolle:
Es gibt einige weitere manuelle Methoden, die ich gesehen habe, einige, die hier und da ein oder zwei Zuordnungen vermeiden. Aus Gründen der Lesbarkeit halte ich die beiden oben genannten für ausreichend.
quelle
join
dokumentiert? Es scheint auf halbem Weg zwischen einem Array und einem String zu liegen. Ich durchsuchte die Array- Dokumentation und war schnell verwirrt.join
ist tatsächlich mit demSliceContactExt
Merkmal verbunden . Das Merkmal ist als instabil markiert, aber seine Methoden sind stabil und im Prelude enthalten, sodass sie standardmäßig überall verwendet werden können. Das Team scheint sich bewusst zu sein, dass dieses Merkmal nicht existieren muss, und ich kann mir vorstellen, dass sich die Dinge in Zukunft damit ändern werden.Ich denke diese
concat
Methode und+
sollte auch hier erwähnt werden:und es gibt auch
concat!
Makro, aber nur für Literale:quelle
+
wird bereits in einer bestehenden Antwort erwähnt . ( Dies ist eine Implementierung desAdd
Merkmals , dass ein nimmt ,String
wie auf der linken Seite und eine&str
als die rechte Seite: )Einfache Möglichkeiten, Zeichenfolgen in RUST zu verketten
In RUST stehen verschiedene Methoden zum Verketten von Zeichenfolgen zur Verfügung
Erste Methode (mit
concat!()
):Die Ausgabe des obigen Codes lautet:
Zweite Methode (mit
push_str()
und+
Operator):Die Ausgabe des obigen Codes lautet:
Dritte Methode (
Using format!()
):Die Ausgabe des obigen Codes lautet:
Probieren Sie es aus und experimentieren Sie mit Rust Spielplatz
quelle