Closed fleetingbytes closed 2 years ago
Happy to explain!
The drop
there is referring to std::mem::drop
^1, which is a free function in the prelude^2 not a closure.
The reason this works with map
is because map
expects any arbitrary type that implements the FnOnce(T) -> U
trait, which is implemented automatically for both closures and for functions or even for any arbitrary type on nightly if you enable the fn_traits
feature and implement FnOnce
manually. The end result is that drop
ends up being called on the String
from the previous function in the Ok
case which just throws it away and replaces it with the unit type ()
aka nothing.
Thank you very much for the thorough explanation. It helped me to learn a great deal of rust basics as I followed the paths in this rabbit hole.
Hi, I'm quite new to rust and I'm just starting to use this library for better error output. I don't understand how can the
usage.rs
example even run. There is this line with.map(drop)
which is completely obscure to me. As far as I have learned, map expects a Closure, butdrop
does not look like a closure, nor has it been defined as a variable. What does it do?If
drop
is a function which is in scope by default, it could be https://doc.rust-lang.org/stable/std/ops/trait.Drop.html, which one tries to execute on a String. But since String is Clone (not Drop), it produces some sort of an error, is that it?