无法在返回结果的函数中返回错误?

Gra*_*osi 1 rust

我正在尝试学习如何使用结果,并且想要创建一个抛出错误的函数。所以如果我创建这个:

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)

为什么会失败?以及我如何真正返回错误?

Wal*_*oot 5

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。如果您只是返回错误,则类型不匹配。