Skip to content

Commit

Permalink
Merge pull request #1851 from xpcoffee/clarify-from-into
Browse files Browse the repository at this point in the history
Clarify interchangability for From and Into
  • Loading branch information
marioidival authored May 20, 2024
2 parents 0d22813 + 2caac6e commit 2048289
Showing 1 changed file with 33 additions and 6 deletions.
39 changes: 33 additions & 6 deletions src/conversion/from_into.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,10 @@ fn main() {

## `Into`

The [`Into`] trait is simply the reciprocal of the `From` trait. That is, if you
have implemented the `From` trait for your type, `Into` will call it when
necessary.
The [`Into`] trait is simply the reciprocal of the `From` trait. It
defines how to convert a type into another type.

Using the `Into` trait will typically require specification of the type to
convert into as the compiler is unable to determine this most of the time.
However this is a small trade-off considering we get the functionality for free.
Calling `into()` typically requires us to specify the result type as the compiler is unable to determine this most of the time.

```rust,editable
use std::convert::Into;
Expand All @@ -72,5 +69,35 @@ fn main() {
}
```

## `From` and `Into` are interchangable

`From` and `Into` are designed to be complementary.
We do not need to provide an implementation for both traits.
If you have implemented the `From` trait for your type, `Into` will call it
when necessary.

```rust,editable
use std::convert::From;
#[derive(Debug)]
struct Number {
value: i32,
}
// Define `From`
impl From<i32> for Number {
fn from(item: i32) -> Self {
Number { value: item }
}
}
fn main() {
let int = 5;
// use `Into`
let num: Number = int.into();
println!("My number is {:?}", num);
}
```

[`From`]: https://doc.rust-lang.org/std/convert/trait.From.html
[`Into`]: https://doc.rust-lang.org/std/convert/trait.Into.html

0 comments on commit 2048289

Please sign in to comment.