Вы почти у цели!
/// Notice you were missing a generic parameter
fn unwrap_option /*->*/ <T> /*<-*/ (data: Option<T>) -> T
where T: Default
{
if let Some(data) = data {
data
} else {
T::default()
}
}
Эта попытка получить значение с помощью оператора if let
, а затем возвращает значение по умолчанию, если оно равно None
. Другой способ написать это так:
fn unwrap_option<T: Default>(x: Option<T>) -> T {
match x { // Have we got data?
Some(x) => x, // We do? Return it then
None => T::default(),// We don't? Get default then
}
}
Но, как уже упоминалось в комментариях, использование Option::unwrap_or_default
, вероятно, является лучшей идеей.