There is some symmetry between the methods of HashMap's Entry and Option, e.g.
https://doc.rust-lang.org/nightly/std/collections/hash_map/enum.Entry.html#method.or_insert
https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.get_or_insert
https://doc.rust-lang.org/nightly/std/collections/hash_map/enum.Entry.html#method.or_insert_with
https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.get_or_insert_with
But the analogue of Entry's or_default is missing from Option:
Option should have a method get_or_default, that does conceptually the same as or_default by doing self.get_or_insert_with(|| Default::default()) (returns &mut T).
(This use case occurs often in some projects of mine..)
This is already available as Option::unwrap_or_default.
Closing as completed.
@clarcharr It's not the same because it consumes the Option instead of mutating it.
One can do opt = Some(opt.unwrap_or_default()); but then one doesn't have a &mut T to work with, that refers to the Some(..)-content of the Option!
In the use-cases where I needed this, I need to have the &mut T from that point on, just like with Entry's or_default. (In other cases, yes, I use unwrap_or_default.)
So I think it's still worth adding the get_or_default method that returns a &mut T to the contents of the Option.
(In fact, I need this behavior more often with Option than with HashMap's Entry.)
@Centril Can we please re-open this issue? :)
Bump, please consider reopening this.
self.get_or_default()
is 20 characters shorter than
self.get_or_insert_with(Default::default)
Most helpful comment
@clarcharr It's not the same because it consumes the
Optioninstead of mutating it.One can do
opt = Some(opt.unwrap_or_default());but then one doesn't have a&mut Tto work with, that refers to theSome(..)-content of theOption!In the use-cases where I needed this, I need to have the
&mut Tfrom that point on, just like withEntry'sor_default. (In other cases, yes, I useunwrap_or_default.)So I think it's still worth adding the
get_or_defaultmethod that returns a&mut Tto the contents of theOption.(In fact, I need this behavior more often with
Optionthan withHashMap'sEntry.)@Centril Can we please re-open this issue? :)