As I read the docs I just cannot figure out the differences between and_then
and map
for types like Option
or Result
. They both seem to be mapping lets say an Option<T>
to Option<U>
.
9 Likes
The argument to the closure (or Fn) that you provide. map
takes a FnOnce(T) -> U
whereas and_then
takes a FnOnce(T) -> Option<U>
. With and_then
you can combine several operations which each may individually fail, whereas map
applies an infallible transformation.
22 Likes
option.map()
transforms Option<T> to Option<U>, while
and_then
is a like a short circuiting boolean-AND operation
for option.map()
. The long form is:
match option {
None => None,
val => match val.map(f1) {
None => None,
val => match val.map(f2) {
None => None,
val => val.map(f3),
}
}
}
short form is:
option.and_then(f1).and_then(f2).and_then(f3);
5 Likes
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.