fixes to Option::{zip,zip_with}

- remove `#[inline]` attributes (see https://github.com/rust-lang/rust/pull/69997#discussion_r393942617)
- fill tracking issue in `#[unstable]` attributes
- slightly improve the docs
This commit is contained in:
Waffle 2020-03-18 11:02:29 +03:00
parent a5206f9749
commit d36d3fa5a6

View File

@ -916,8 +916,8 @@ impl<T> Option<T> {
/// Zips `self` with another `Option`.
///
/// Returns `Some((_, _))` when both `self` and `other`
/// are `Some(_)`, otherwise return `None`.
/// If `self` is `Some(s)` and other is `Some(o)`, this method returns `Some((s, o))`.
/// Otherwise, `None` is returned.
///
/// # Examples
///
@ -930,16 +930,15 @@ impl<T> Option<T> {
/// assert_eq!(x.zip(y), Some((1, "hi")));
/// assert_eq!(x.zip(z), None);
/// ```
#[inline]
#[unstable(feature = "option_zip", issue = "none")]
#[unstable(feature = "option_zip", issue = "70086")]
pub fn zip<U>(self, other: Option<U>) -> Option<(T, U)> {
self.zip_with(other, |a, b| (a, b))
}
/// Zips `self` and another `Option` with function `f`.
///
/// Returns `Some(_)` when both `self` and `other`
/// are `Some(_)`, otherwise return `None`.
/// If `self` is `Some(s)` and other is `Some(o)`, this method returns `Some(f(s, o))`.
/// Otherwise, `None` is returned.
///
/// # Examples
///
@ -958,14 +957,13 @@ impl<T> Option<T> {
/// }
/// }
///
/// let x = Some(17.);
/// let y = Some(42.);
/// let x = Some(17.5);
/// let y = Some(42.7);
///
/// assert_eq!(x.zip_with(y, Point::new), Some(Point { x: 17., y: 42. }));
/// assert_eq!(x.zip_with(y, Point::new), Some(Point { x: 17.5, y: 42.7 }));
/// assert_eq!(x.zip_with(None, Point::new), None);
/// ```
#[inline]
#[unstable(feature = "option_zip", issue = "none")]
#[unstable(feature = "option_zip", issue = "70086")]
pub fn zip_with<U, F, R>(self, other: Option<U>, f: F) -> Option<R>
where
F: FnOnce(T, U) -> R,