Skip to content

Commit 294ef5b

Browse files
committed
Auto merge of #29039 - Manishearth:rollup, r=Manishearth
- Successful merges: #28991, #29004, #29006, #29013, #29016, #29024, #29027, #29028, #29029, #29032, #29035 - Failed merges:
2 parents 2939666 + 66b58d1 commit 294ef5b

File tree

13 files changed

+515
-272
lines changed

13 files changed

+515
-272
lines changed

src/doc/reference.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -1435,11 +1435,11 @@ struct Foo;
14351435

14361436
trait Shape { fn area(&self) -> f64; }
14371437
trait Circle : Shape { fn radius(&self) -> f64; }
1438-
# impl Shape for Foo {
1439-
# fn area(&self) -> f64 {
1440-
# 0.0
1441-
# }
1442-
# }
1438+
impl Shape for Foo {
1439+
fn area(&self) -> f64 {
1440+
0.0
1441+
}
1442+
}
14431443
impl Circle for Foo {
14441444
fn radius(&self) -> f64 {
14451445
println!("calling area: {}", self.area());

src/doc/trpl/lifetimes.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ associated with it, but the compiler lets you elide (i.e. omit, see
7474
["Lifetime Elision"][lifetime-elision] below) them in common cases.
7575
Before we get to that, though, let’s break the explicit example down:
7676

77-
[lifetime-elision]: #user-content-lifetime-elision
77+
[lifetime-elision]: #lifetime-elision
7878

7979
```rust,ignore
8080
fn bar<'a>(...)

src/libcore/iter.rs

+109-1
Original file line numberDiff line numberDiff line change
@@ -3032,7 +3032,52 @@ impl<A: Clone> DoubleEndedIterator for Repeat<A> {
30323032
fn next_back(&mut self) -> Option<A> { Some(self.element.clone()) }
30333033
}
30343034

3035-
/// Creates a new iterator that endlessly repeats the element `elt`.
3035+
/// Creates a new iterator that endlessly repeats a single element.
3036+
///
3037+
/// The `repeat()` function repeats a single value over and over and over and
3038+
/// over and over and 🔁.
3039+
///
3040+
/// Infinite iterators like `repeat()` are often used with adapters like
3041+
/// [`take()`], in order to make them finite.
3042+
///
3043+
/// [`take()`]: trait.Iterator.html#method.take
3044+
///
3045+
/// # Examples
3046+
///
3047+
/// Basic usage:
3048+
///
3049+
/// ```
3050+
/// use std::iter;
3051+
///
3052+
/// // the number four 4ever:
3053+
/// let mut fours = iter::repeat(4);
3054+
///
3055+
/// assert_eq!(Some(4), fours.next());
3056+
/// assert_eq!(Some(4), fours.next());
3057+
/// assert_eq!(Some(4), fours.next());
3058+
/// assert_eq!(Some(4), fours.next());
3059+
/// assert_eq!(Some(4), fours.next());
3060+
///
3061+
/// // yup, still four
3062+
/// assert_eq!(Some(4), fours.next());
3063+
/// ```
3064+
///
3065+
/// Going finite with [`take()`]:
3066+
///
3067+
/// ```
3068+
/// use std::iter;
3069+
///
3070+
/// // that last example was too many fours. Let's only have four fours.
3071+
/// let mut four_fours = iter::repeat(4).take(4);
3072+
///
3073+
/// assert_eq!(Some(4), four_fours.next());
3074+
/// assert_eq!(Some(4), four_fours.next());
3075+
/// assert_eq!(Some(4), four_fours.next());
3076+
/// assert_eq!(Some(4), four_fours.next());
3077+
///
3078+
/// // ... and now we're done
3079+
/// assert_eq!(None, four_fours.next());
3080+
/// ```
30363081
#[inline]
30373082
#[stable(feature = "rust1", since = "1.0.0")]
30383083
pub fn repeat<T: Clone>(elt: T) -> Repeat<T> {
@@ -3089,6 +3134,19 @@ impl<T> Default for Empty<T> {
30893134
}
30903135

30913136
/// Creates an iterator that yields nothing.
3137+
///
3138+
/// # Exampes
3139+
///
3140+
/// Basic usage:
3141+
///
3142+
/// ```
3143+
/// use std::iter;
3144+
///
3145+
/// // this could have been an iterator over i32, but alas, it's just not.
3146+
/// let mut nope = iter::empty::<i32>();
3147+
///
3148+
/// assert_eq!(None, nope.next());
3149+
/// ```
30923150
#[stable(feature = "iter_empty", since = "1.2.0")]
30933151
pub fn empty<T>() -> Empty<T> {
30943152
Empty(marker::PhantomData)
@@ -3129,6 +3187,56 @@ impl<T> ExactSizeIterator for Once<T> {
31293187
}
31303188

31313189
/// Creates an iterator that yields an element exactly once.
3190+
///
3191+
/// This is commonly used to adapt a single value into a [`chain()`] of other
3192+
/// kinds of iteration. Maybe you have an iterator that covers almost
3193+
/// everything, but you need an extra special case. Maybe you have a function
3194+
/// which works on iterators, but you only need to process one value.
3195+
///
3196+
/// [`chain()`]: trait.Iterator.html#method.chain
3197+
///
3198+
/// # Examples
3199+
///
3200+
/// Basic usage:
3201+
///
3202+
/// ```
3203+
/// use std::iter;
3204+
///
3205+
/// // one is the loneliest number
3206+
/// let mut one = iter::once(1);
3207+
///
3208+
/// assert_eq!(Some(1), one.next());
3209+
///
3210+
/// // just one, that's all we get
3211+
/// assert_eq!(None, one.next());
3212+
/// ```
3213+
///
3214+
/// Chaining together with another iterator. Let's say that we want to iterate
3215+
/// over each file of the `.foo` directory, but also a configuration file,
3216+
/// `.foorc`:
3217+
///
3218+
/// ```no_run
3219+
/// use std::iter;
3220+
/// use std::fs;
3221+
/// use std::path::PathBuf;
3222+
///
3223+
/// let dirs = fs::read_dir(".foo").unwrap();
3224+
///
3225+
/// // we need to convert from an iterator of DirEntry-s to an iterator of
3226+
/// // PathBufs, so we use map
3227+
/// let dirs = dirs.map(|file| file.unwrap().path());
3228+
///
3229+
/// // now, our iterator just for our config file
3230+
/// let config = iter::once(PathBuf::from(".foorc"));
3231+
///
3232+
/// // chain the two iterators together into one big iterator
3233+
/// let files = dirs.chain(config);
3234+
///
3235+
/// // this will give us all of the files in .foo as well as .foorc
3236+
/// for f in files {
3237+
/// println!("{:?}", f);
3238+
/// }
3239+
/// ```
31323240
#[stable(feature = "iter_once", since = "1.2.0")]
31333241
pub fn once<T>(value: T) -> Once<T> {
31343242
Once { inner: Some(value).into_iter() }

0 commit comments

Comments
 (0)