¿Cómo convierto de un número entero a una cadena?

87

No puedo compilar código que convierta un tipo de un número entero a una cadena. Estoy ejecutando un ejemplo del tutorial de Rust para Rubyists que tiene varias conversiones de tipo, como:

"Fizz".to_str()y num.to_str()(donde numes un número entero).

Creo que la mayoría (si no todas) de estas to_str()llamadas a funciones han quedado obsoletas. ¿Cuál es la forma actual de convertir un número entero en una cadena?

Los errores que obtengo son:

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`
usuario3358302
fuente
lo siento si no lo sigo, pero he intentado buscar la fuente int y parece usar doc.rust-lang.org/0.11.0/std/num/strconv/index.html pero esto solo devuelve un vector de bytes . Además, existe el to_string()método pero que devuelve Stringy no una cadena literal.
user3358302
jaja no importa, pensé que to_str()era un valor de retorno diferente, lo to_string()
usaré
1
@ user3358302, ningún método puede devolver algo que llames "cadena literal" a menos que devuelvan literales conocidos estáticamente porque estos valores tienen tipo &'static str, es decir, un segmento de cadena con una duración estática, que es imposible de obtener utilizando datos creados dinámicamente. Solo puede crearlos utilizando cadenas literales.
Vladimir Matveev
¡bueno saber! Creo que el método to_strme confundió (que como dijiste, cambiaron el nombre para mayor claridad) pensando que estaba devolviendo un segmento de cadena en lugar de un Stringobjeto.
user3358302

Respuestas:

122

Utilice to_string()( ejemplo de ejecución aquí ):

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

Tienes razón; to_str()se renombró to_string()antes de que se lanzara Rust 1.0 para mantener la coherencia porque ahora se llama a una cadena asignada String.

Si necesita pasar un segmento de cadena en algún lugar, debe obtener una &strreferencia de String. Esto se puede hacer usando &y una coerción deref:

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

El tutorial al que vinculó parece obsoleto. Si está interesado en las cadenas de Rust, puede consultar el capítulo de cadenas de The Rust Programming Language .

Vladimir Matveev
fuente
1
Muchas gracias hombre, esto aclara las cosas :) También voy a seguir ese tutorial ya que la conversión de cadenas parece algo que todavía está cambiando en el óxido.
user3358302