gpt4 book ai didi

closures - 在多个闭包之一中捕获相同的变量

转载 作者:行者123 更新时间:2023-11-29 08:22:04 25 4
gpt4 key购买 nike

我有两个捕获相同 Vec 的闭包,但我不知道如何用惯用的 Rust 编写它:

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() }));
}

我可以用 match 表达式替换 map_err 调用,但我真的被这个难住了:我如何将 Vec 传递给多个闭包?

最佳答案

首先:请务必提供MCVE将来,在能够重现问题之前必须修复语法错误并不有趣:http://is.gd/tXr7WK

Rust 不知道第二个闭包可以运行的唯一方法是第一个闭包没有运行并且永远不会运行。您可以等待 let/else要接受、实现和稳定 RFC,或者您可以分步创建错误,首先创建一个内部闭包,在不使用 token 的情况下执行该错误类型的所有操作,然后运行闭包,然后将错误映射到您的自定义错误类型。

|| -> _ {
try!(do_stuff("a").map_err(|e| ("foo".to_owned(), e)));
try!(do_other_stuff("b","c").map_err(|e| ("bar".to_owned(), e)));
Ok(())
} ().map_err(|(reason, e)| MyError::IoError{ token: token, reason: reason })

闭包要求我们用 -> _ 指定它返回一些东西,但我不确定它是什么。

关于closures - 在多个闭包之一中捕获相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com