let foo = maybe_foo.unwrap_or_else(|| Foo::new());
println!("{:?}", foo);
}
Нужно создавать дефолтный объект только, если в аргументе прилетело None и дропать в конце скоупа.
Этот пример не работает, т.к. из лямбды возвращается не ссылка.
Для дефолтности есть трейт Default
так работает же: fn example(maybe_foo: Option<&Foo>) { let foo = maybe_foo.unwrap_or_else(|| &Foo {}); println!("{:?}", foo); } #[derive(Debug)] struct Foo;
А если у тебя None, то откуда ты ссылку возмёшь?
https://doc.rust-lang.org/core/option/enum.Option.html#method.get_or_insert_with
Обсуждают сегодня