Есть ли способ вернуться из функции внутри замыкания? - PullRequest
0 голосов
/ 26 августа 2018

У меня есть следующий упрощенный код:

fn f() -> i32 {
    let a = some_result.unwrap_or_else(|_| {
        return 1; // want to return this value from f <-------------
    });
}

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

Если вместо этого я использую выражение match, оно работает следующим образом:

fn f() -> i32 {
    let a = match some_result {
        Ok(result) => result,
        Err(_)     => { return 1; },
    };
}

Однако это делает код многословным, так как у меня есть тривиальная рука Ok match.

1 Ответ

0 голосов
/ 26 августа 2018

Нет, нет.

Закрытие - это метод (разновидность функции) под капотом.Вы запрашиваете возможность выхода из родительской функции из произвольно глубоко вложенного вызова функции.Такое нелокальное управление потоком, как правило, оказалось крайне вредным для здравомыслия программиста и обслуживания программы.


Чтобы решить вашу проблему:

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