Skip to content

Commit 97c4248

Browse files
committed
add boxing; episode 14
1 parent 3a0f8b1 commit 97c4248

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[workspace]
2-
members = ["./ownership-and-borrowing", "options-and-results", "errors", "iterators", "strings"]
2+
members = ["./ownership-and-borrowing", "options-and-results", "errors", "iterators", "strings", "boxing"]

boxing/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "boxing"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]

boxing/src/main.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
fn make_iterator(select: bool) -> Box<dyn Iterator<Item = u32>> {
2+
if select {
3+
Box::new([1u32].into_iter())
4+
} else {
5+
Box::new(vec![0u32].into_iter())
6+
}
7+
}
8+
9+
fn use_iterator(iter: impl Iterator<Item = u32>) {
10+
for num in iter {
11+
println!("{}", num)
12+
}
13+
}
14+
15+
fn use_dyn_iterator(iter: &mut dyn Iterator<Item = u32>) {
16+
for num in iter {
17+
println!("{}", num)
18+
}
19+
}
20+
21+
struct MyVec<'a> {
22+
inner: Vec<&'a String>,
23+
}
24+
25+
impl<'a> MyVec<'a> {
26+
fn iter(&self) -> Box<dyn Iterator<Item = &String> + '_> {
27+
Box::new(self.inner.iter().copied())
28+
}
29+
}
30+
31+
fn main() {
32+
use_iterator(make_iterator(true));
33+
use_iterator([1u32].into_iter());
34+
35+
use_dyn_iterator(&mut [1u32].into_iter());
36+
use_dyn_iterator(&mut make_iterator(true));
37+
38+
let other = vec![2u32];
39+
let empty: Vec<u32>;
40+
let iter = if false {
41+
empty = Vec::new();
42+
empty.iter()
43+
} else {
44+
other.iter()
45+
};
46+
47+
for item in iter {
48+
println!("{}", item)
49+
}
50+
}

0 commit comments

Comments
 (0)