es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rust devuelve un vector de PathBufs desde una función después de usar fs::read_dir.

Hola, he encontrado algún código aquí que parece funcionar para devolver un Vec desde una función, pero tengo problemas para entender el código. El código está abajo, he añadido comentarios para mostrar dónde me confundo.

fn read_filename_from_dir<p>(path: P) -> Result<><pathbuf>, io::Error> 
    where P: AsRef<path>,
{
    fs::read_dir(path)? 
    .into_iter() 
    .map(|x| x.map(|entry| entry.path()))
    .collect()  
}

Supongo que, dado que tenemos un iterador que contiene Result, ¿no tendríamos que desempaquetar primero cada DirEntry y luego simplemente mapear una vez desempaquetado o el doble map desempaqueta de alguna manera? ¿Cómo desempaquetarías un iterador de resultados? ¿Usando map(|x| x.unwrap())?

Espero que esto te ayude.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El doble mapa en el código se utiliza para manejar Resultados anidados. El primer mapa se ejecuta en el Resultado devuelto por el iterador, y aplica un cierre que mapea de DirEntry a PathBuf, resultando en otro Resultado. El segundo mapa se ejecuta luego en el Resultado externo que fue producido por el primer mapa, y aplica un cierre que mapea de Resultado a Opción. El resultado final de esta cadena de mapas es una colección de PathBuf envuelta en un Resultado.

    Para desempaquetar un iterador de Resultados, puedes utilizar los métodos map y unwrap juntos de la siguiente manera:

    iter.map(|r| r.unwrap()).collect()
    

    Esto devolverá una colección de valores desempaquetados, descartando cualquier resultado de error.

Comments are closed.