1 stable release
1.0.0 | Mar 9, 2022 |
---|
#2390 in Rust patterns
4KB
disown
Drop ownership from "method position".
Motivation
Normally, unowned data is automatically dropped at the end of its residing
block. We can also ignore unuseful return values with ;
, which is
essentially a T -> ()
transformation. However, there are cases where we
wish to drop ownership and return cleanly with a ()
, but don't want to
involve ;
(such as in closures or simple match
arms). We could use
std::mem::drop
for this, but drop
is a function, not a method, and
would visually mar a nice chain of method calls.
Hence the Disown
trait and its method disown
. It is drop
, but in
"method position".
use disown::Disown;
use std::collections::HashSet;
enum Person {
Bob,
Sam,
}
let mut set = HashSet::new();
let person = Person::Bob;
match person {
Person::Bob => set.insert(0).disown(),
Person::Sam => set.insert(1).disown(),
}
HashSet::insert
returns a bool
, not ()
, and the above code would not
compile without opening a pair of {}
and using a ;
, which doesn't look
as nice.
License: MIT