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`

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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.