book: Clarify that trait or type must be in same crate as impl
This commit is contained in:
parent
8f36038490
commit
9624b68207
1 changed files with 9 additions and 5 deletions
|
@ -277,11 +277,15 @@ This will compile without error.
|
|||
This means that even if someone does something bad like add methods to `i32`,
|
||||
it won’t affect you, unless you `use` that trait.
|
||||
|
||||
There’s one more restriction on implementing traits: either the trait, or the
|
||||
type you’re writing the `impl` for, must be defined by you. So, we could
|
||||
implement the `HasArea` type for `i32`, because `HasArea` is in our code. But
|
||||
if we tried to implement `ToString`, a trait provided by Rust, for `i32`, we could
|
||||
not, because neither the trait nor the type are in our code.
|
||||
There’s one more restriction on implementing traits: either the trait
|
||||
or the type you’re implementing it for must be defined by you. Or more
|
||||
precisely, one of them must be defined in the same crate as the `impl`
|
||||
you're writing.
|
||||
|
||||
So, we could implement the `HasArea` type for `i32`, because we defined
|
||||
`HasArea` in our code. But if we tried to implement `ToString`, a trait
|
||||
provided by Rust, for `i32`, we could not, because neither the trait nor
|
||||
the type are defined in our crate.
|
||||
|
||||
One last thing about traits: generic functions with a trait bound use
|
||||
‘monomorphization’ (mono: one, morph: form), so they are statically dispatched.
|
||||
|
|
Loading…
Add table
Reference in a new issue