У меня есть два затворов, которые захватывают ту же Vec
, и я не знаю, как написать это в идиоматических Руст:Захватив ту же переменную в одном из нескольких закрытий
use std::error;
fn get_token -> Box<Vec<u8>>() {...}
fn do_stuff(file: &str) -> std::io::Result<i32> {...}
fn do_other_stuff(a: &str, a: &str) -> std::io::Result<i32> {...}
enum MyError {
IoError { token: Vec<u8>, reason: String),
}
fn consumer() -> Result<MyError,()> {
let token = get_token();
try!(do_stuff("a")
.map_err(|e| MyError::IoError { token: token, reason: "foo".to_str() }));
try!(do_other_stuff("b", "c")
.map_err(|e| MyError::IoError { token: token, reason: "bar".to_str() }));
}
Я мог бы заменить map_err
звонки с match
но я действительно в шоке от этого: как я могу пройти Vec
для нескольких закрытий?
Возможно, я спрошу, почему вывод 'get_token',' Box> 'а не просто' Vec ' –