Skip to content

Commit bdd1809

Browse files
committed
---
yaml --- r: 226847 b: refs/heads/master c: 78d2833 h: refs/heads/master i: 226845: f0df021 226843: 1eaf17a 226839: 415bf79 226831: 0bb13cb 226815: 18c79ac v: v3
1 parent 10a35e6 commit bdd1809

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: d83a0fdf7da8b93b21de6ff2809e81a69447a9a5
2+
refs/heads/master: 78d28336feb9f46ac5929023f45acdbb3f3379e5
33
refs/heads/snap-stage3: 1af31d4974e33027a68126fa5a5a3c2c6491824f
44
refs/heads/try: b53c0f93eedcdedd4fd89bccc5a3a09d1c5cd23e
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

trunk/src/librustc_borrowck/diagnostics.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,28 @@ The problem here is that foo is defined as accepting a parameter of type `Fn`.
125125
Closures passed into foo will thus be inferred to be of type `Fn`, meaning that
126126
they capture their context immutably.
127127
128-
The solution is to capture the data mutably. This can be done by defining `foo`
129-
to take FnMut rather than Fn:
128+
If the definition of `foo` is under your control, the simplest solution is to
129+
capture the data mutably. This can be done by defining `foo` to take FnMut
130+
rather than Fn:
130131
131132
```
132133
fn foo<F: FnMut()>(f: F) { }
133134
```
135+
136+
Alternatively, we can consider using the `Cell` and `RefCell` types to achieve
137+
interior mutability through a shared reference. Our example's `mutable` function
138+
could be redefined as below:
139+
140+
```
141+
fn mutable() {
142+
let x = std::cell::Cell::new(0u32);
143+
foo(|| x.set(2));
144+
}
145+
```
146+
147+
You can read more about cell types in the API documentation:
148+
149+
https://doc.rust-lang.org/std/cell/
134150
"##
135151

136152
}

0 commit comments

Comments
 (0)