functional-programming rust

functional programming - ¿Cómo analizo una cadena en una lista de flotantes usando un estilo funcional?



functional-programming rust (1)

Estoy tratando de analizar una cadena en una lista de valores de coma flotante en Rust. Asumiría que hay una forma inteligente de hacerlo utilizando iteradores y Option ; sin embargo, no puedo hacer que ignore los valores de Err que resultan de llamadas fallidas de análisis (). El tutorial de Rust no parece cubrir ningún ejemplo como este, y la documentación es confusa en el mejor de los casos.

¿Cómo podría implementar esto usando las operaciones de vector / lista de estilo funcional? También se agradecerían los consejos sobre el mejor estilo de Rust para mi implementación iterativa.

Estilo "funcional"

Pánico cuando se encuentra con un Err

input.split(" ").map(|s| s.parse::<f32>().unwrap()).collect::<Vec<_>>()

Estilo iterativo

Ignora los valores no flotantes según lo previsto

fn parse_string(input: &str) -> Vec<f32> { let mut vals = Vec::new(); for val in input.split_whitespace() { match val.parse() { Ok(v) => vals.push(v), Err(_) => (), } } vals } fn main() { let params = parse_string("1 -5.2 3.8 abc"); for &param in params.iter() { println!("{:.2}", param); } }


filter_map hace lo que quiere, transformando los valores y filtrando None :

input.split(" ").filter_map(|s| s.parse::<f32>().ok()).collect::<Vec<_>>();

Tenga en cuenta el método ok para convertir el Result en una Option .