Как мне проигнорировать ошибку, возвращенную функцией Rust, и продолжить независимо? - PullRequest
0 голосов
/ 02 июля 2018

Когда известно, что какой-то фрагмент кода может вызвать ошибку, мы используем блоки try/catch, чтобы игнорировать такие ошибки и продолжить. Это делается, когда ошибка не так важна, но, возможно, мы хотим только зарегистрировать ее:

try{
    int i = 1/0;
} catch( ArithmeticException e){
    System.out.println("Encountered an error but would proceed.");
} 
x = y;

Такая конструкция в Java будет продолжать выполняться x = y;.

Могу ли я использовать match для выполнения этой или любой другой конструкции?

Я вижу макрос try!, но, возможно, он вернется в случае ошибки с типом возврата метода, равным Result.

Я хочу использовать такую ​​конструкцию в UT, чтобы она продолжала работать даже после возникновения ошибки.

1 Ответ

0 голосов
/ 02 июля 2018

Функции в Rust, которые могут потерпеть неудачу, возвращают Result:

Result<T, E> - это тип, используемый для возврата и распространения ошибок. Это перечисление с вариантами Ok(T), представляющими успех и содержащими значение, и Err(E), представляющими ошибку и содержащими значение ошибки.

Я настоятельно рекомендую прочитать раздел Обработка ошибок в Rust Book :

Rust имеет ряд функций для обработки ситуаций, в которых что-то идет не так

Если вы хотите игнорировать ошибку, у вас есть разные возможности:

  • Не используйте Result:

    let _ = failing_function();
    

    Функция будет вызвана, но результат будет проигнорирован.

  • Игнорировать Err вариант Result, используя if let или match:

    if let Ok(ret) = failing_function() {
        // use the returned value
    }
    
  • Распакуйте ошибку. Этот код паникует, если произошла ошибка:

    let ret = failing_function().unwrap();
    // or
    let ret = failing_function().expect("A panic message to be displayed");
    

try!() разворачивает результат и возвращает функцию досрочно, если произошла ошибка. Тем не менее, вы должны использовать ? вместо try!, поскольку это , вероятно, будет устаревшим .


Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...