mirror of
https://github.com/rust-lang/book.git
synced 2026-09-15 06:39:31 -04:00
Merge pull request #1012 from canndrew/never-rewording
Reword description of how ! coerces into other types
This commit is contained in:
@@ -213,11 +213,11 @@ As you may have guessed, `continue` has a value of `!`. That is, when Rust goes
|
||||
to compute the type of `guess`, it looks at both of the match arms. The former
|
||||
has a value of `u32`, and the latter has a value of `!`. Since `!` can never
|
||||
have a value, Rust is okay with this, and decides that the type of `guess` is
|
||||
`u32`. The formal way of describing this behavior of `!` is that the never type
|
||||
unifies with all other types. We’re allowed to end this `match` arm with
|
||||
`continue` because `continue` doesn’t actually return a value; it instead moves
|
||||
control back to the top of the loop, so in the `Err` case, we never actually
|
||||
assign a value to `guess`.
|
||||
`u32`. The formal way of describing this behavior is that expressions of type
|
||||
`!` can be coerced into any other type. We’re allowed to end this `match` arm
|
||||
with `continue` because `continue` doesn’t actually return a value; it instead
|
||||
moves control back to the top of the loop, so in the `Err` case, we never
|
||||
actually assign a value to `guess`.
|
||||
|
||||
Another use of the never type is `panic!`. Remember the `unwrap` function that
|
||||
we call on `Option<T>` values to produce a value or panic? Here’s its
|
||||
|
||||
Reference in New Issue
Block a user