¿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`

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 .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.