Clarify behavior of slice prefix/suffix operations in case of equality
Operations such as starts_with, ends_with, strip_prefix and strip_suffix can be either strict (do not consider a slice to be a prefix/suffix of itself) or not. In Rust's case, they are not strict. Add a few phrases to the documentation to clarify this.
This commit is contained in:
@@ -2519,7 +2519,7 @@ impl<T> [T] {
|
|||||||
cmp::SliceContains::slice_contains(x, self)
|
cmp::SliceContains::slice_contains(x, self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `true` if `needle` is a prefix of the slice.
|
/// Returns `true` if `needle` is a prefix of the slice or equal to the slice.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
@@ -2527,6 +2527,7 @@ impl<T> [T] {
|
|||||||
/// let v = [10, 40, 30];
|
/// let v = [10, 40, 30];
|
||||||
/// assert!(v.starts_with(&[10]));
|
/// assert!(v.starts_with(&[10]));
|
||||||
/// assert!(v.starts_with(&[10, 40]));
|
/// assert!(v.starts_with(&[10, 40]));
|
||||||
|
/// assert!(v.starts_with(&v));
|
||||||
/// assert!(!v.starts_with(&[50]));
|
/// assert!(!v.starts_with(&[50]));
|
||||||
/// assert!(!v.starts_with(&[10, 50]));
|
/// assert!(!v.starts_with(&[10, 50]));
|
||||||
/// ```
|
/// ```
|
||||||
@@ -2549,7 +2550,7 @@ impl<T> [T] {
|
|||||||
self.len() >= n && needle == &self[..n]
|
self.len() >= n && needle == &self[..n]
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `true` if `needle` is a suffix of the slice.
|
/// Returns `true` if `needle` is a suffix of the slice or equal to the slice.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
@@ -2557,6 +2558,7 @@ impl<T> [T] {
|
|||||||
/// let v = [10, 40, 30];
|
/// let v = [10, 40, 30];
|
||||||
/// assert!(v.ends_with(&[30]));
|
/// assert!(v.ends_with(&[30]));
|
||||||
/// assert!(v.ends_with(&[40, 30]));
|
/// assert!(v.ends_with(&[40, 30]));
|
||||||
|
/// assert!(v.ends_with(&v));
|
||||||
/// assert!(!v.ends_with(&[50]));
|
/// assert!(!v.ends_with(&[50]));
|
||||||
/// assert!(!v.ends_with(&[50, 30]));
|
/// assert!(!v.ends_with(&[50, 30]));
|
||||||
/// ```
|
/// ```
|
||||||
@@ -2582,7 +2584,8 @@ impl<T> [T] {
|
|||||||
/// Returns a subslice with the prefix removed.
|
/// Returns a subslice with the prefix removed.
|
||||||
///
|
///
|
||||||
/// If the slice starts with `prefix`, returns the subslice after the prefix, wrapped in `Some`.
|
/// If the slice starts with `prefix`, returns the subslice after the prefix, wrapped in `Some`.
|
||||||
/// If `prefix` is empty, simply returns the original slice.
|
/// If `prefix` is empty, simply returns the original slice. If `prefix` is equal to the
|
||||||
|
/// original slice, returns an empty slice.
|
||||||
///
|
///
|
||||||
/// If the slice does not start with `prefix`, returns `None`.
|
/// If the slice does not start with `prefix`, returns `None`.
|
||||||
///
|
///
|
||||||
@@ -2592,6 +2595,7 @@ impl<T> [T] {
|
|||||||
/// let v = &[10, 40, 30];
|
/// let v = &[10, 40, 30];
|
||||||
/// assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
|
/// assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
|
||||||
/// assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
|
/// assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
|
||||||
|
/// assert_eq!(v.strip_prefix(&[10, 40, 30]), Some(&[][..]));
|
||||||
/// assert_eq!(v.strip_prefix(&[50]), None);
|
/// assert_eq!(v.strip_prefix(&[50]), None);
|
||||||
/// assert_eq!(v.strip_prefix(&[10, 50]), None);
|
/// assert_eq!(v.strip_prefix(&[10, 50]), None);
|
||||||
///
|
///
|
||||||
@@ -2620,7 +2624,8 @@ impl<T> [T] {
|
|||||||
/// Returns a subslice with the suffix removed.
|
/// Returns a subslice with the suffix removed.
|
||||||
///
|
///
|
||||||
/// If the slice ends with `suffix`, returns the subslice before the suffix, wrapped in `Some`.
|
/// If the slice ends with `suffix`, returns the subslice before the suffix, wrapped in `Some`.
|
||||||
/// If `suffix` is empty, simply returns the original slice.
|
/// If `suffix` is empty, simply returns the original slice. If `suffix` is equal to the
|
||||||
|
/// original slice, returns an empty slice.
|
||||||
///
|
///
|
||||||
/// If the slice does not end with `suffix`, returns `None`.
|
/// If the slice does not end with `suffix`, returns `None`.
|
||||||
///
|
///
|
||||||
@@ -2630,6 +2635,7 @@ impl<T> [T] {
|
|||||||
/// let v = &[10, 40, 30];
|
/// let v = &[10, 40, 30];
|
||||||
/// assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
|
/// assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
|
||||||
/// assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
|
/// assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
|
||||||
|
/// assert_eq!(v.strip_suffix(&[10, 40, 30]), Some(&[][..]));
|
||||||
/// assert_eq!(v.strip_suffix(&[50]), None);
|
/// assert_eq!(v.strip_suffix(&[50]), None);
|
||||||
/// assert_eq!(v.strip_suffix(&[50, 30]), None);
|
/// assert_eq!(v.strip_suffix(&[50, 30]), None);
|
||||||
/// ```
|
/// ```
|
||||||
|
|||||||
Reference in New Issue
Block a user