Skip to content

Commit b482e06

Browse files
committed
add is_none_or
1 parent 209f8c8 commit b482e06

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

core/src/option.rs

+26
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,32 @@ impl<T> Option<T> {
654654
!self.is_some()
655655
}
656656

657+
/// Returns `true` if the option is a [`None`] or the value inside of it matches a predicate.
658+
///
659+
/// # Examples
660+
///
661+
/// ```
662+
/// #![feature(is_none_or)]
663+
///
664+
/// let x: Option<u32> = Some(2);
665+
/// assert_eq!(x.is_none_or(|x| x > 1), true);
666+
///
667+
/// let x: Option<u32> = Some(0);
668+
/// assert_eq!(x.is_none_or(|x| x > 1), false);
669+
///
670+
/// let x: Option<u32> = None;
671+
/// assert_eq!(x.is_none_or(|x| x > 1), true);
672+
/// ```
673+
#[must_use]
674+
#[inline]
675+
#[unstable(feature = "is_none_or", issue = "none")]
676+
pub fn is_none_or(self, f: impl FnOnce(T) -> bool) -> bool {
677+
match self {
678+
None => true,
679+
Some(x) => f(x),
680+
}
681+
}
682+
657683
/////////////////////////////////////////////////////////////////////////
658684
// Adapter for working with references
659685
/////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)