Wie konvertiere ich von einer Ganzzahl in eine Zeichenfolge?

91

Ich kann keinen Code kompilieren, der einen Typ von einer Ganzzahl in eine Zeichenfolge konvertiert. Ich führe ein Beispiel aus dem Tutorial von Rust for Rubyists aus, das verschiedene Typkonvertierungen enthält, wie z.

"Fizz".to_str()und num.to_str()(wo numist eine ganze Zahl).

Ich denke, die Mehrheit (wenn nicht alle) dieser to_str()Funktionsaufrufe sind veraltet. Wie kann eine Ganzzahl derzeit in eine Zeichenfolge konvertiert werden?

Die Fehler, die ich bekomme, sind:

error: type `&'static str` does not implement any method in scope named `to_str`
error: type `int` does not implement any method in scope named `to_str`
user3358302
quelle
Es tut mir leid, wenn ich nicht folge, aber ich habe versucht, die int-Quelle nachzuschlagen , und sie scheint doc.rust-lang.org/0.11.0/std/num/strconv/index.html zu verwenden, aber dies gibt nur einen Byte-Vektor zurück . Zusätzlich gibt es die to_string()Methode, die aber zurückgibt Stringund keine Literalzeichenfolge.
user3358302
haha egal, ich dachte, to_str()es wäre ein anderer Rückgabewert, den ich verwenden werdeto_string()
user3358302
1
@ user3358302, keine Methode kann etwas zurückgeben, das Sie als "Literalzeichenfolge" bezeichnen, es sei denn, sie geben statisch bekannte Literale zurück, da diese Werte vom Typ sind &'static str, dh einen Zeichenfolgenschnitt mit einer statischen Lebensdauer, der mit dynamisch erstellten Daten nicht abgerufen werden kann . Sie können sie nur mit Zeichenfolgenliteralen erstellen.
Vladimir Matveev
gut zu wissen! Ich denke, die Methode hat to_strmich verwirrt (was, wie Sie sagten, aus Gründen der Klarheit umbenannt wurde), weil ich dachte, es würde ein String-Slice anstelle eines StringObjekts zurückgegeben.
user3358302

Antworten:

128

Verwendung to_string()( laufendes Beispiel hier ):

let x: u32 = 10;
let s: String = x.to_string();
println!("{}", s);

Du hast recht; to_str()wurde aus Gründen der to_string()Konsistenz in Rust 1.0 umbenannt, da jetzt eine zugewiesene Zeichenfolge aufgerufen wird String.

Wenn Sie irgendwo ein String-Slice übergeben müssen, müssen Sie eine &strReferenz von erhalten String. Dies kann mit &einem Deref-Zwang geschehen :

let ss: &str = &s;   // specifying type is necessary for deref coercion to fire
let ss = &s[..];     // alternatively, use slicing syntax

Das Tutorial, mit dem Sie verlinkt haben, scheint veraltet zu sein. Wenn Sie an Strings in Rust interessiert sind, können Sie das Kapitel über Strings in The Rust Programming Language lesen .

Vladimir Matveev
quelle
1
Vielen Dank Mann, das klärt die Dinge auf :) Auch ich werde dieses Tutorial durchgehen, da die String-Konvertierung wie etwas scheint, das sich auf Rost immer noch ändert.
user3358302