Skip to content

Commit d03c486

Browse files
committed
Add a replace method to Option
1 parent c892139 commit d03c486

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

text/0000-option-replace.md

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
- Feature Name: `option-replace`
2+
- Start Date: 2017-01-16
3+
- RFC PR: (leave this empty)
4+
- Rust Issue: (leave this empty)
5+
6+
# Summary
7+
[summary]: #summary
8+
9+
The standard library provides the `Option::take` method that returns the optional inner value and leaves a `None` in place. This RFC proposes the addition of `Option::replace` to complete the previously cited method, this method replaces the actual value in the option by the value given in parameter, returning the old value if present, leaving a `Some` in its place without deinitializing either one.
10+
11+
# Motivation
12+
[motivation]: #motivation
13+
14+
Why are we doing this? What use cases does it support? What is the expected outcome?
15+
16+
How do you replace a value inside an `Option`, you can use `mem::replace` but it can be really unconvenient to import the `mem` module just for that. Why not adding a useful method to do that ?
17+
This is the same kind of method than the `take` one.
18+
19+
# Detailed design
20+
[design]: #detailed-design
21+
22+
This methid will be added to the `core::option::Option` type implementation:
23+
24+
```rust
25+
use core::mem::replace;
26+
27+
pub fn replace(&mut self, value: T) -> Option<T> {
28+
mem::replace(self, Some(value))
29+
}
30+
```
31+
32+
# Drawbacks
33+
[drawbacks]: #drawbacks
34+
35+
It increases the size of the standard library by a tiny bit.
36+
37+
# Alternatives
38+
[alternatives]: #alternatives
39+
40+
Use directly `mem::replace`.
41+
42+
# Unresolved questions
43+
[unresolved]: #unresolved-questions
44+
45+
None.

0 commit comments

Comments
 (0)