Update panic!() documentation about non-string panics.

This commit is contained in:
Mara Bos 2021-02-02 10:30:50 +01:00
parent e9ad5be0f7
commit 753b0b0b80
1 changed files with 8 additions and 7 deletions

View File

@ -10,22 +10,23 @@ tests. `panic!` is closely tied with the `unwrap` method of both
`panic!` when they are set to [`None`] or [`Err`] variants. `panic!` when they are set to [`None`] or [`Err`] variants.
This macro is used to inject panic into a Rust thread, causing the thread to This macro is used to inject panic into a Rust thread, causing the thread to
panic entirely. Each thread's panic can be reaped as the [`Box`]`<`[`Any`]`>` type, panic entirely. This macro panics with a string and uses the [`format!`] syntax
and the single-argument form of the `panic!` macro will be the value which for building the message.
is transmitted.
Each thread's panic can be reaped as the [`Box`]`<`[`Any`]`>` type,
which contains either a `&str` or `String` for regular `panic!()` invocations.
To panic with a value of another other type, [`panic_any`] can be used.
[`Result`] enum is often a better solution for recovering from errors than [`Result`] enum is often a better solution for recovering from errors than
using the `panic!` macro. This macro should be used to avoid proceeding using using the `panic!` macro. This macro should be used to avoid proceeding using
incorrect values, such as from external sources. Detailed information about incorrect values, such as from external sources. Detailed information about
error handling is found in the [book]. error handling is found in the [book].
The multi-argument form of this macro panics with a string and has the
[`format!`] syntax for building a string.
See also the macro [`compile_error!`], for raising errors during compilation. See also the macro [`compile_error!`], for raising errors during compilation.
[ounwrap]: Option::unwrap [ounwrap]: Option::unwrap
[runwrap]: Result::unwrap [runwrap]: Result::unwrap
[`panic_any`]: ../std/panic/fn.panic_any.html
[`Box`]: ../std/boxed/struct.Box.html [`Box`]: ../std/boxed/struct.Box.html
[`Any`]: crate::any::Any [`Any`]: crate::any::Any
[`format!`]: ../std/macro.format.html [`format!`]: ../std/macro.format.html
@ -42,6 +43,6 @@ program with code `101`.
# #![allow(unreachable_code)] # #![allow(unreachable_code)]
panic!(); panic!();
panic!("this is a terrible mistake!"); panic!("this is a terrible mistake!");
panic!(4); // panic with the value of 4 to be collected elsewhere
panic!("this is a {} {message}", "fancy", message = "message"); panic!("this is a {} {message}", "fancy", message = "message");
std::panic::panic_any(4); // panic with the value of 4 to be collected elsewhere
``` ```