Часто возникает ситуация, когда функция возвращает
Result и при ошибке нужно просто вернуть ее из текущей функции без дополнительной обработки. В таких случаях можно избежать громоздкой конструкции
match, используя оператор
?.
Было:
let file = match File::open("data.txt") {
Ok(f) => f,
Err(e) => return Err(e),
};
Стало:
let file = File::open("data.txt")?;
Оператор
? автоматически извлекает значение из
Ok() или возвращает ошибку из
Err(). Важно помнить, что этот подход работает только когда ваша функция тоже возвращает
Result и вам не нужна особая обработка ошибок.
Для случаев, когда ошибку нужно обработать (например, записать в лог или использовать значение по умолчанию),
match остается необходимым инструментом.