Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9921cd2

Browse files
authoredJun 13, 2024
Rollup merge of rust-lang#126328 - RalfJung:is_none_or, r=workingjubilee
Add Option::is_none_or ACP: rust-lang/libs-team#212
2 parents 17c90d8 + b482e06 commit 9921cd2

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)
Failed to load comments.