У меня есть функция, которая пытается вернуть Ref
из Refcell
. Ссылка находится за Option
, и я хотел бы иметь возможность вернуть ссылку или ошибку, если Option
равно None
.
В настоящее время я заранее проверяю, есть ли это нет и возвращает ошибку, если это так. После этого я вызываю unwrap()
в Option внутри Ref::map
, чтобы вернуть объект.
Есть ли более эргономичный c способ сделать это? Это кажется очень раздражающим (множественные заимствования (), et c.) Option
имеет метод ok_or
, который превращает его в тип результата. Есть ли способ использовать это здесь?
Вот Rust Детская площадка для воспроизведения минимального примера:
pub fn get_thing_convenience(&self) -> Result<Ref<f32>, Box<dyn Error>> {
if self.thing.borrow().is_none() {
return Err(Box::new(MyError("blah".into())))
}
let thing = Ref::map(self.thing.borrow(), |t| t.unwrap());
Ok(thing)
}