traduccion ps4 lenguaje language juego rust

ps4 - rust traduccion



¿Convertir una cadena a int en Rust? (6)

Nota: ¡esta pregunta contiene un código anterior a 1.0 obsoleto! Sin embargo, la respuesta es correcta.

Para convertir un str en un int en Rust, puedo hacer esto:

let my_int = from_str::<int>(my_str);

La única forma en que sé cómo convertir una String en un int es obtener una porción de ella y luego usar from_str en ella de esta manera:

let my_int = from_str::<int>(my_string.as_slice());

¿Hay alguna manera de convertir directamente una String en un int ?


Bueno no. ¿Por qué debería haber? Simplemente descarte la cadena si ya no la necesita.

&str es más útil que String cuando solo necesita leer una cadena, porque es solo una vista del dato original, no su propietario. Puede pasarlo más fácilmente que String , y es copiable, por lo que los métodos invocados no lo consumen. En este sentido, es más general: si tiene un String , puede pasarlo a donde se espera un &str , pero si tiene &str , solo puede pasarlo a las funciones que esperan String si realiza una nueva asignación.

Puede encontrar más información sobre las diferencias entre estos dos y cuándo usarlos en la guía oficial de cadenas .


Con una noche reciente, puedes hacer esto:

let my_int = from_str::<int>(&*my_string);

Lo que sucede aquí es que String ahora se puede desreferenciar en un str . Sin embargo, la función quiere un &str , por lo que tenemos que pedir prestado nuevamente. Como referencia, creo que este patrón particular ( &* ) se llama "préstamo cruzado".


Puede convertir directamente a int utilizando el método str::parse::<T>() .

let my_string = "27".to_string(); // `parse()` works with `&str` and `String`! let my_int = my_string.parse::<i32>().unwrap();

Puede especificar el tipo para analizar con el operador de turbohélice ( ::<> ) como se muestra arriba o mediante una anotación explícita de tipo:

let my_int: i32 = my_string.parse().unwrap();

Como se menciona en los comentarios, parse() devuelve un Result . Este resultado será un Err si la cadena no se puede analizar como el tipo especificado (por ejemplo, la cadena "peter" no se puede analizar como i32 ).


Puede usar el método from_str del rasgo from_str , que se implementa para i32 :

let my_num = i32::from_str("9").unwrap_or(0);


Si obtiene su cadena de stdin().read_line , primero debe recortarla.

let my_num: i32 = my_num.trim().parse() .expect("please give me correct string number!");


let my_u8: u8 = "42".parse::<u8>().unwrap(); let my_u32: u32 = "42".parse::<u32>().unwrap(); // or, to be safe, match the `Err` match "foobar".parse::<i32>() { Ok(n) => do_something_with(n), Err(e) => weep_and_moan(), }

parse devuelve un core::result::Result<u32, core::num::ParseIntError> y unwrap "mueve el valor v fuera de la Opción si es Some (v) [o] Pánico si el valor propio es igual a Ninguno" .

parse es una función genérica , de ahí el tipo entre paréntesis angulares.