Rust 错误处理(我有一个 utf8error,我想返回 io::Result)



我正在组合一组函数,用于从文件中读取数据。在我将读取n字节作为字符串函数之前,一切都很好。这是我目前的尝试:

pub fn read_string<R: Read>(input: &mut R, size: u32) -> io::Result<String> {
let mut buf = vec![0u8; size as usize];
input.read_exact(&mut buf)?;
match str::from_utf8(buf.as_slice()) {
Ok (v) => Ok(v),
Err (e) => ???,
}
}

我为我的matchErr臂尝试了一些不同的东西,但运气不好。我曾希望我能从str::from_utf8返回Result,但没有成功。如何获取e中的utf8error并将其转换为函数的适当返回类型?

好吧,我已经想好了,我需要将Error::new封装在Err()中。我在Ok()上也有一个类型不匹配。这是功能的工作版本:

pub fn read_string<R: Read>(input: &mut R, size: u32) -> io::Result<String> {
let mut buf = vec![0u8; size as usize];
input.read_exact(&mut buf)?;
match String::from_utf8(buf) {
Ok (v) => Ok(v),
Err (e) => Err(io::Error::new(ErrorKind::Other, e))
}
}

编辑以纳入NieDzejkob的建议,供那些可能想要重用此代码的人使用。

最新更新