如何解决使用问号?运算符发生错误时,如何登录文件?
动机:我想记录文件名,行号,函数名,错误代码等以帮助分析错误
Rust有?
来进行错误处理。如果?
中存在错误,我想将信息记录到文件中。如何实现呢?
代码:
let a = do_some_function_may_return_error()?; // Does it auto log the error info when error occurs?
let b = a.do_another_function_may_return_error()?; // Does it auto log the error info when error occurs?
解决方法
不,这不会发生,并且可能不能有多种原因:
- Rust语言旨在在甚至没有文件 的系统上运行,因此要求它像
?
这样基本的东西将是入门。 -
?
可以用于Result
之外的其他类型,例如Option
或Poll
。这些应该记录到文件吗? - 您甚至将如何配置文件以登录?
- 错误类型
Result
不保证可以将其格式化为文本格式。
相反,我要添加一个扩展特征:
trait LogExt {
fn log(self) -> Self;
}
impl<T,E> LogExt for Result<T,E>
where
E: std::fmt::Display,{
fn log(self) -> Self {
if let Err(e) = &self {
eprintln!("An error happened: {}",e);
}
self
}
}
这将在每个?
之前使用:
fn main() -> Result<(),String> {
fails().log()?;
Ok(())
}
fn fails() -> Result<(),String> {
Err("Oh no!".into())
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。