traduccion ps4 lenguaje language descargar rust

ps4 - rust traduccion



En Rust, ¿cuál es el equivalente idiomático de Haskell''s[n..m]? (3)

Tenga en cuenta que esta respuesta pertenece a una versión anterior a la versión 1.0 de Rust y no se aplica a 1.0. Específicamente, se eliminó Vec::from_fn .

Probablemente no haya nada realmente idiomático a partir de ahora. Hay un puñado de funciones de conveniencia para construir vectores, por ejemplo, puede usar Vec::from_fn :

Vec::from_fn(m+1-n, |i| i+n)

¿Cómo puedo producir una lista que contenga todos los enteros en Rust? Estoy buscando el equivalente de Haskell''s [n..m] o el range(n, m+1) de Python range(n, m+1) pero no puedo encontrar nada.

Soy consciente de la función int::range y pensé que era lo que estaba buscando, pero está hecho para iterar en un rango, no para producirlo.


Tenga en cuenta que esta respuesta pertenece a una versión anterior a la versión 1.0 de Rust y no se aplica a 1.0. Específicamente, se eliminaron std::iter::range y std::iter::range_inclusive .

A partir de Rust 1.0.0-alpha, la forma más sencilla de lograr esto es usar las funciones de conveniencia proporcionadas en el módulo std::iter : range y range_inclusive , que devuelven iteradores que generan una lista de números en el rango [bajo, alto] o [bajo, alto], respectivamente.

Además, puedes construir un vector a partir de un iterador utilizando el método de collect :

use std::iter::range_inclusive; let first_hundred: Vec<i32> = range_inclusive(1, 100).collect(); println!("upper bound inclusive: {:?}, exclusive: {:?}", first_hundred, range(101, 201).collect::<Vec<_>>());

Tenga en cuenta que el valor de retorno de collect tiene su tipo explícitamente especificado en los dos usos anteriores. Normalmente, el compilador Rust puede inferir los tipos de expresiones sin una especificación explícita, pero collect es uno de los casos más comunes para los cuales el tipo no se puede inferir por completo, en este caso porque no puede inferir un tipo concreto que implemente el rasgo FromIterator<A> , el tipo de devolución de collect .

El tipo de valor de retorno genérico se puede especificar como un tipo explícito en una declaración de definición de let o en línea utilizando la sintaxis function::<Type>() . Como la inferencia falla solo debido a que no se conoce un tipo concreto que implementa FromIterator<A> , es posible, al especificar explícitamente un tipo genérico, dejar "agujeros" para los argumentos de tipo que se deducirán, lo que significa _ . Esto se hace con la segunda llamada para collect arriba, en la expresión Vec<_> , se especifica explícitamente que el contenedor que recibe los elementos de la collect es un Vec<T> , pero el compilador determina qué tipo exacto debe ser. Actualmente, los enteros cuyos tipos se dejan sin especificar y no se pueden inferir caen de nuevo a i32 (entero de máquina de 32 bits) como valor predeterminado.


Ahora es posible usar .. en Rust:

let vec: Vec<_> = (n .. m + 1).collect();

te da un Vec de todos los números de n a m .

Como se señala en el comentario de Shepmaster, tenga cuidado, no funcionará si necesita un rango hasta el valor máximo del tipo ( 255 para u8 ).