我正在尝试学习如何使用结果,并且想要创建一个抛出错误的函数。所以如果我创建这个:
use std::io::{Read, Write,Error};
fn func(n:u8) -> Result<u8, Error> {
if (n == 2){
Error::new(ErrorKind::Other, "oh no!")
} else {
return Ok(n)
}
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为该函数需要一个结果,而不是一个实际的错误。但我认为我能够做到这一点,就像函数返回的错误一样。它给出了这个错误:
note: expected enum `std::result::Result<u8, std::io::Error>`
found struct `std::io::Error`rustc(E0308)
Run Code Online (Sandbox Code Playgroud)
为什么会失败?以及我如何真正返回错误?
n就像您需要首先将值包装起来一样Ok,您需要像这样包装您的Error值:Err
fn func(n: u8) -> Result<u8, Error> {
if n == 2 {
Err(Error::new(ErrorKind::Other, "oh no!"))
} else {
Ok(n)
}
}
Run Code Online (Sandbox Code Playgroud)
原因很简单:Result是一个枚举,可以是 anOk或 an Err。如果您只是返回错误,则类型不匹配。
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |