Sou novo no Rust (semana 1) e estou tendo problemas para acessar uma variável dentro de um iterador. Peço desculpas antecipadamente se esta for uma pergunta duplicada. Eu nem tenho certeza de como fazer essa pergunta de maneira inteligente.
Além disso, alguém pode me indicar a direção certa sobre como processar cada arquivo em um thread diferente.
let files = fs::read_dir(path).unwrap();
for file_name in files {
println!("Processing File: {}", file_name.unwrap().path().display());
// how do I pass the file name to open?
// everything I try I get a 'file_name moved due to this method call' error
let file = File::open(file_name.....).expect("Unable to open file");
}
Como você está investigando esse problema pela primeira vez, acho que um exemplo passo a passo pode ajudá-lo. Claro, existem maneiras muito mais curtas de fazer o equivalente (em particular, esta função é muito conveniente para abrir e ler todo o conteúdo em uma única chamada).
Como existem muitas interações com o sistema subjacente, quase todas as operações podem falhar. Decidi tratar explicitamente o erro sempre com uma
match
declaração explícita. Novamente, existem muitas maneiras de lidar com os sucessos/fracassos.Bem, acho que o compilador de ferrugem lhe dá uma mensagem muito útil!
uso do valor movido:
file_name
valor usado aqui após a movimentação main.rs(11, 34):file_name
movido devido a esta chamada de método main.rs(11, 24): help: considere chamar.as_ref()
ou.as_mut()
pegar emprestado o conteúdo do tipo main.rs(10, 9): a movimentação ocorre porquefile_name
possui typeResult<DirEntry, std::io::Error>
, que não implementa aCopy
característica result.rs(1083, 19):Result::<T, E>::unwrap
toma posse do receptorself
, que se movefile_name
Basta usar as_ref() e o nome do arquivo é passado como referência em vez de ser movido.