Comment convertir un entier en chaîne?

87

Je suis incapable de compiler du code qui convertit un type d'un entier en une chaîne. J'exécute un exemple du didacticiel Rust for Rubyists qui a diverses conversions de type telles que:

"Fizz".to_str()et num.to_str()(où numest un entier).

Je pense que la majorité (sinon la totalité) de ces to_str()appels de fonction sont obsolètes. Quelle est la façon actuelle de convertir un entier en chaîne?

Les erreurs que je reçois sont:

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
la source
désolé si je ne suis pas mais j'ai essayé de rechercher la source int et il semble utiliser doc.rust-lang.org/0.11.0/std/num/strconv/index.html mais cela renvoie juste un vecteur d'octet . De plus, il y a la to_string()méthode mais qui retourne Stringet non une chaîne littérale.
user3358302
haha Nevermind, je pensais que to_str()c'était une valeur de retour différente, je vais utiliserto_string()
user3358302
1
@ user3358302, aucune méthode ne peut renvoyer une chose que vous appelez "chaîne littérale" à moins qu'elle ne retourne des littéraux statiquement connus car ces valeurs ont un type &'static str, c'est-à-dire une tranche de chaîne avec une durée de vie statique, ce qui est impossible à obtenir en utilisant des données créées dynamiquement. Vous ne pouvez les créer qu'à l'aide de chaînes littérales.
Vladimir Matveev
bon à savoir! Je pense que la méthode to_strm'a confondu (ce qui, comme vous l'avez dit, ils ont renommé pour plus de clarté) en pensant qu'elle renvoyait une tranche de chaîne au lieu d'un Stringobjet.
user3358302

Réponses:

122

Utilisez to_string()( exemple en cours d'exécution ici ):

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

Tu as raison; to_str()a été renommé to_string()avant la publication de Rust 1.0 pour des raisons de cohérence car une chaîne allouée est désormais appelée String.

Si vous devez passer une tranche de chaîne quelque part, vous devez obtenir une &strréférence à partir de String. Cela peut être fait en utilisant &et une coercition déréf:

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

Le didacticiel auquel vous avez lié semble obsolète. Si vous êtes intéressé par les chaînes dans Rust, vous pouvez consulter le chapitre sur les chaînes du langage de programmation Rust .

Vladimir Matveev
la source
1
Merci beaucoup mec, cela clarifie les choses :) Je vais également parcourir ce tutoriel car la conversion de chaînes semble être quelque chose qui change encore sur la rouille.
user3358302