]>
Commit | Line | Data |
---|---|---|
136023e0 | 1 | // edition:2021 |
fc512014 XL |
2 | // run-pass |
3 | ||
4 | // Test disjoint capture within an impl block | |
5 | ||
fc512014 XL |
6 | struct Filter { |
7 | div: i32, | |
8 | } | |
9 | impl Filter { | |
10 | fn allowed(&self, x: i32) -> bool { | |
11 | x % self.div == 1 | |
12 | } | |
13 | } | |
14 | ||
15 | struct Data { | |
16 | filter: Filter, | |
17 | list: Vec<i32>, | |
18 | } | |
19 | impl Data { | |
20 | fn update(&mut self) { | |
21 | // The closure passed to filter only captures self.filter, | |
22 | // therefore mutating self.list is allowed. | |
23 | self.list.retain( | |
24 | |v| self.filter.allowed(*v), | |
25 | ); | |
26 | } | |
27 | } | |
28 | ||
29 | fn main() { | |
30 | let mut d = Data { filter: Filter { div: 3 }, list: Vec::new() }; | |
31 | ||
32 | for i in 1..10 { | |
33 | d.list.push(i); | |
34 | } | |
35 | ||
36 | d.update(); | |
37 | } |