Rust中函数返回类型处的感叹号‘!’有什么作用?
Rust中函数返回值
-> !里感叹号的作用 这个!是Rust的发散类型(Never Type),专门用来标记那些永远不会正常返回的函数。
拿你贴的代码来说:wait_forever里是一个无限循环,调用asm::wfe()后会一直停在循环里,永远不会退出并返回任何值。用-> !告诉编译器:一旦调用这个函数,后续的代码绝对不会被执行到。
关于发散类型还有几个实用的点:
- 它可以隐式转换成任意类型,所以你能把返回
!的函数放在需要任何类型的分支里,比如:fn get_valid_number() -> u32 { let input = get_user_input(); if let Ok(num) = input.parse() { num } else { panic!("无效输入"); // panic!的类型是!,能转成u32填充这个分支 } } - 别把它和宏后面的
!搞混:像panic!()、println!()这类宏的!是Rust用来区分宏和普通函数的语法标记,和返回值里的发散类型!完全是两回事。 - 除了无限循环,像调用
std::process::exit()(直接终止程序)、std::panic::panic_any()这类不会返回的函数,它们的返回类型也都是!。
内容的提问来源于stack exchange,提问作者simgar
相关产品推荐
相关产品推荐

