gpt4 book ai didi

rust - 闭包类型不匹配

转载 作者:行者123 更新时间:2023-11-29 08:19:05 27 4
gpt4 key购买 nike

我知道 Rust 有一个学习曲线,但没想到这么快就上手了。很长一段时间以来,我一直在努力解决这种类型不匹配问题,但没有取得任何进展。

struct FileInfo<'a> {
path: &'a Path
}

fn process_file(entry: &DirEntry, map: &HashMap<&str, &FileInfo>) {
let pathbuf = entry.path();
let mut f = fs::File::open(pathbuf.as_path()).unwrap();
let info = FileInfo { path: pathbuf.as_path() };
}

fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry) -> ()) -> io::Result<()> {
// Taken from Rust read_dir docs
// ...
}

fn main() {
let path = Path::new("/Users/gmadrid/Media/");
let map : HashMap<&str, &FileInfo> = HashMap::new();

visit_dirs(path, |e: &DirEntry| process_file(e, &map)).unwrap();
}

调用visit_dirs barfs 在我关闭时:

src/main.rs:51:19: 51:55 error: mismatched types [E0308]
src/main.rs:51 visit_dirs(path, |e: &DirEntry| process_file(e, &map)).unwrap();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:51:19: 51:55 help: run `rustc --explain E0308` to see a detailed explanation
src/main.rs:51:19: 51:55 note: expected type `&for<'r> std::ops::Fn(&'r std::fs::DirEntry)`
src/main.rs:51:19: 51:55 note: found type `[closure@src/main.rs:51:19: 51:55 map:_]`
error: aborting due to previous error

什么是 for<'r>东西?以及为什么会发生这种类型不匹配。对我来说看起来不错,但当然,我不知道我在找什么。 :-)

最佳答案

一如既往,我在将问题发布到 SO 后五分钟找到了答案。

visit_dirs() 函数接受一个trait 对象!因此,将 & 放在闭包前面可以解决我的不匹配问题。

关于rust - 闭包类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398837/

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