捕获某些内容的闭包需要将其保存在(闭包的)字段中,这会导致错误,而是传递
errors
作为参数:
let mut errors: Vec<String> = Vec::new();
let msg1 = "message 1".to_string();
let msg2 = "message 2".to_string();
let msg3 = "message 3".to_string();
let mut push_auth_requirements = |errors: &mut Vec<_>| {
errors.push(msg1.clone());
errors.push(msg2.clone());
};
let mut push_auth_error = |errors: &mut Vec<_>| {
errors.push(msg3.clone());
push_auth_requirements(errors);
};
// do some stuff
if errors.is_empty() {
// do more stuff
if "bob" == "dsadasd" {
push_auth_requirements(&mut errors);
} else {
push_auth_error(&mut errors);
}
}
println!("Errors: {:?}", errors);