diff options
| author | Clar Charr <clar@charr.xyz> | 2018-05-08 21:30:38 -0400 |
|---|---|---|
| committer | Clar Charr <clar@charr.xyz> | 2018-05-15 12:49:31 -0400 |
| commit | 8ab2d15f6753054797c88f07028e4802c43b70ab (patch) | |
| tree | d4f96192fc0a39b412dc4da697e615c7d65b7479 | |
| parent | b183bd0ad40b0188fc242bfb9f68a0cf1704dbd9 (diff) | |
| download | rust-8ab2d15f6753054797c88f07028e4802c43b70ab.tar.gz rust-8ab2d15f6753054797c88f07028e4802c43b70ab.zip | |
Add Option::xor method
| -rw-r--r-- | src/libcore/option.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 0dfdabee031..28f37f72d6f 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -705,6 +705,42 @@ impl<T> Option<T> { } } + /// Returns [`Some`] if exactly one of `self`, `optb` is [`Some`], otherwise returns `None`. + /// + /// [`Some`]: #variant.Some + /// [`None`]: #variant.None + /// + /// # Examples + /// + /// ``` + /// #![feature(option_xor)] + /// + /// let x = Some(2); + /// let y: Option<u32> = None; + /// assert_eq!(x.xor(y), Some(2)); + /// + /// let x: Option<u32> = None; + /// let y = Some(2); + /// assert_eq!(x.xor(y), Some(2)); + /// + /// let x = Some(2); + /// let y = Some(2); + /// assert_eq!(x.xor(y), None); + /// + /// let x: Option<u32> = None; + /// let y: Option<u32> = None; + /// assert_eq!(x.xor(y), None); + /// ``` + #[inline] + #[unstable(feature = "option_xor", issue = "50512")] + pub fn xor(self, optb: Option<T>) -> Option<T> { + match (self, optb) { + (Some(a), None) => Some(a), + (None, Some(b)) => Some(b), + _ => None, + } + } + ///////////////////////////////////////////////////////////////////////// // Entry-like operations to insert if None and return a reference ///////////////////////////////////////////////////////////////////////// |
