Я пытаюсь научиться использовать результаты и хочу сделать функцию, которая выдает ошибку из одного. Итак, если я создам это:
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)
}
}
Это не скомпилируется, потому что функция ожидает результат, а не реальную ошибку. Но я думал, что смогу это сделать, так как просто ошибка, которую возвращает функция. Это дает эту ошибку:
note: expected enum `std::result::Result<u8, std::io::Error>`
found struct `std::io::Error`rustc(E0308)
Почему это не удается? и как мне на самом деле вернуть ошибку?
Так же, как вам нужно сначала обернуть значение n
в Ok
, вам нужно обернуть Error
в Err
следующим образом:
fn func(n: u8) -> Result<u8, Error> {
if n == 2 {
return Err(Error::new(ErrorKind::Other, "oh no!"))
}
Ok(n)
}
Причина этого проста: Result
— это перечисление, которое является либо Ok
, либо Err
. Если вы просто возвращаете ошибку, тип не соответствует.
Обратите внимание, что ключевое слово
return
здесь избыточно.