about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-02-25 04:21:11 +0530
committerManish Goregaokar <manishsmail@gmail.com>2016-02-25 04:21:11 +0530
commitb660ca59ff16bc4bfb675fa6afe61b32aa284d96 (patch)
treeb86509358be85838e2c677348bb476a981327f6b /src
parenta834cd1b70aecdc71b7fc4f9ff127ecaf1b2258d (diff)
parent7042c8ef8d8242b96bbf9efd2a7de472a3b71e05 (diff)
downloadrust-b660ca59ff16bc4bfb675fa6afe61b32aa284d96.tar.gz
rust-b660ca59ff16bc4bfb675fa6afe61b32aa284d96.zip
Rollup merge of #31870 - ivan:filter-explain, r=steveklabnik
As a Rust newbie, I found the book's explanation for why the `filter` closure gets a reference very confusing, and tried to figure out why `filter` is somehow less consumptive than `map` -- but it isn't; that's controlled by `iter`/`into_iter`.  I flailed around for a while until @habnabit explained it to me, and in retrospect it is quite obvious :-)
Diffstat (limited to 'src')
-rw-r--r--src/doc/book/iterators.md10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/doc/book/iterators.md b/src/doc/book/iterators.md
index 5622326d20c..0c4f8041266 100644
--- a/src/doc/book/iterators.md
+++ b/src/doc/book/iterators.md
@@ -311,10 +311,12 @@ for i in (1..100).filter(|&x| x % 2 == 0) {
 ```
 
 This will print all of the even numbers between one and a hundred.
-(Note that because `filter` doesn't consume the elements that are
-being iterated over, it is passed a reference to each element, and
-thus the filter predicate uses the `&x` pattern to extract the integer
-itself.)
+(Note that, unlike `map`, the closure passed to `filter` is passed a reference
+to the element instead of the element itself. The filter predicate here uses
+the `&x` pattern to extract the integer. The filter closure is passed a
+reference because it returns `true` or `false` instead of the element,
+so the `filter` implementation must retain ownership to put the elements
+into the newly constructed iterator.)
 
 You can chain all three things together: start with an iterator, adapt it
 a few times, and then consume the result. Check it out: