Невозможно вернуть ошибку в функции, которая возвращает результат?

Я пытаюсь научиться использовать результаты и хочу сделать функцию, которая выдает ошибку из одного. Итак, если я создам это:

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)

Почему это не удается? и как мне на самом деле вернуть ошибку?

Обратите внимание, что ключевое слово return здесь избыточно.

cdhowie 10.04.2022 06:50
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
1
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Так же, как вам нужно сначала обернуть значение 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. Если вы просто возвращаете ошибку, тип не соответствует.

Другие вопросы по теме