Разобрать целое число или предоставить значение по умолчанию с unwrap_or, но вывести сообщение об ошибке при использовании значения по умолчанию - PullRequest
0 голосов
/ 13 февраля 2019

Я написал некоторый код, который анализирует файл конфигурации.Если файл конфигурации содержит допустимое значение для поля, он устанавливается в Config struct.Если для параметра не найдено действительного целочисленного значения, оно устанавливает значение по умолчанию (например, 90).

let config = Config {
    interval: settings.get("interval").unwrap().parse().unwrap_or(90),
}

Как сделать это, чтобы сделать замыкание, чтобы оно могло печатать через error! иустановить значение по умолчанию?

Выглядит примерно так:

let config = Config {
    interval: settings.get("interval").unwrap().parse().unwrap_or({
        error!("No interval found. Using default: 90");
        90
    });
}

Но в этом примере error! всегда выполняется, даже если из конфигурации было прочитано допустимое значение из интервала.

Как мне сделать так, чтобы unwrap_or выполнял код только в optb, когда parse() не удалось?

1 Ответ

0 голосов
/ 13 февраля 2019

Как сделать так, чтобы unwrap_or выполнял код только в optb, когда parse() не удалось?

  • Аргументы переданы unwrap_or с нетерпением оценили .

  • Если вы передаете результат вызова функции, рекомендуется использовать unwrap_or_else, который лениво оценивается .

В вашем сценарии это должно быть изменено следующим образом:

let config: Config = Config {
   interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
        error!("No interval found. Using default: 90");
        90
    }),
}

Детская площадка


Также вы не должны использоватьголый unwrap() в вашем производственном коде.Обработка ошибок - лучшее решение вместо использования голых unwrap()

Здесь вы можете найти подробную информацию о том, почему вы не должны использовать unwrap()

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