Есть ли в Rust ловушки для быстрого возврата к ошибкам? - PullRequest
0 голосов
/ 10 июля 2020

panic! позволяет настроить пользовательский (хотя и глобальный) хук . Есть ли что-нибудь сопоставимое для досрочного возврата с оператором ?? У меня есть функция, которая должна специальным образом закрыть некоторые ресурсы перед выходом. Я мог бы написать функцию ok_or_close(), которая закрывает ресурсы перед возвратом ошибки:

fn opens_resources() -> Result<(), MyError> {
    //Opens some stuff.

    //Now a bunch of functions that might raise errors.
    ok_or_close(foo(), local variables)?;
    ok_or_close(bar(), local variables)?;
    ok_or_close(baz(), local variables)?;

    ok_or_close(Ok(()), local variables)
}

Но это кажется многословным. Что я действительно хотел бы сделать, так это:

fn opens_resources() -> Result<(), MyError> {
    //Opens some stuff.

    //Now a bunch of functions that might raise errors.
    foo()?;
    bar()?;
    baz()?;

on_err:
    //Closes some stuff. Would prefer not to make
    //  this a function, uses many local variables.
    Ok(())
}

Есть ли способ сделать это или шаблон программирования, который обходит это?

1 Ответ

2 голосов
/ 10 июля 2020

Наиболее близким к этому будет трейт Try, который позволяет вам реализовать как? влияют на конкретный тип c, но, к сожалению, это все еще ночной эксперимент, как указано здесь

Если вас интересуют эти функции, я бы рекомендовал вам поставить +1 в этом выпуск

...