Тип never !
Тип ! (never) в Rust - это специальный тип, который
не имеет ни одного значения. Он используется для обозначения
функций и выражений, которые никогда не возвращают управление
вызывающему коду. Это могут быть функции, которые всегда
паникуют, либо бесконечно зациклены, либо завершают процесс.
Тип ! может быть приведён к любому другому типу, что
делает его удобным в конструкциях match, if и
loop, где одна из ветвей никогда не завершается.
Синтаксис
fn имя_функции() -> !
{
// тело функции, которое никогда не возвращает управление
}
Пример
Давайте рассмотрим функцию, которая всегда паникует и
возвращает тип !:
fn always_panics() -> !
{
panic!("This function never returns");
}
fn main()
{
let res = always_panics();
println!("{}", res);
}
Результат выполнения кода:
thread 'main' panicked at 'This function never returns'
Пример
Давайте рассмотрим функцию, которая бесконечно зациклена
и возвращает тип !:
fn infinite_loop() -> !
{
loop
{
println!("Running forever");
}
}
fn main()
{
let res = infinite_loop();
println!("{}", res);
}
Результат выполнения кода:
Running forever
Running forever
Running forever
...
Пример
Давайте используем тип ! в конструкции match,
где одна из ветвей завершает процесс:
fn process_value(value: i32) -> i32
{
match value
{
0 => std::process::exit(0),
_ => value * 2,
}
}
fn main()
{
let res = process_value(5);
println!("{}", res);
}
Результат выполнения кода:
10