gpt4 book ai didi

vector - 使用任意变量返回错误枚举

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

我在 Rust 中有一个函数使用 try! 尝试递归地收集目录中的所有文件并将它们插入到向量中。因为该函数使用 try! 来检查错误,编译器似乎期望从该函数返回一个 io::Result,并且不让我包含向量,因为try! 宏只返回一个结果。我需要返回矢量。

代码如下:

mod os{
use std::io;
use std::fs::{self, DirEntry};
//use std::fs;
use std::path::Path;
// one possible implementation of walking a directory only visiting files
pub fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry)) -> (io::Result<()>,Vec<String>) {
let mut filevec: Vec<String> = Vec::new();
if try!(fs::metadata(dir)).is_dir() {
for entry in try!(fs::read_dir(dir)) {
let entry = try!(entry);
if try!(fs::metadata(entry.path())).is_dir() {
try!(visit_dirs(&entry.path(), cb));
} else {
cb(&entry);
}
}
}
(Ok(()),filevec)

}
fn push_path_to_vec(p:&DirEntry,v:Vec<String>){
v.push(p.path().to_str().unwrap().to_string());
}}

这里是错误:

<std macros>:5:8: 6:42 error: mismatched types:
expected `(core::result::Result<(), std::io::error::Error>, collections::vec::Vec<collections::string::String>)`
found `core::result::Result<_, _>`
(expected tuple,
found enum `core::result::Result`) [E0308]

我想知道是否有任何我错过的惯用方法。

最佳答案

visit_dirs 的返回类型是错的。该函数应返回 Result ,但现在它返回一个元组。自 try!仅适用于返回 Result 的函数,您的代码无法编译。您可以更改 visit_dirs 的返回值为了修复它:

pub fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry)) -> io::Result<Vec<String>>

新定义意味着 Vec<String>将存储在 Result 中成功后。通过一些小的调整,代码被编译器接受(见下文)

mod os{
use std::io;
use std::fs::{self, DirEntry};
//use std::fs;
use std::path::Path;
// one possible implementation of walking a directory only visiting files
pub fn visit_dirs(dir: &Path, cb: &Fn(&DirEntry)) -> io::Result<Vec<String>> {
let mut filevec: Vec<String> = Vec::new();
if try!(fs::metadata(dir)).is_dir() {
for entry in try!(fs::read_dir(dir)) {
let entry = try!(entry);
if try!(fs::metadata(entry.path())).is_dir() {
try!(visit_dirs(&entry.path(), cb));
} else {
cb(&entry);
}
}
}
Ok(filevec)
}
fn push_path_to_vec(p:&DirEntry,mut v:Vec<String>){
v.push(p.path().to_str().unwrap().to_string());
}}

关于vector - 使用任意变量返回错误枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553066/

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