为何无需导入即可直接使用tokio::main过程宏?
为什么无需导入就能直接使用
tokio::main过程宏? 我写了这段能正常编译的Rust代码:
#[tokio::main] async fn main() { }
我好奇的是,为什么不用提前use导入,就能直接用这个过程宏?
原因其实很简单,这是Rust路径引用的基本特性:
- crate名是全局可见的:只要你在
Cargo.toml里声明了对tokio的依赖,tokio这个crate名就会成为全局可用的路径起点。你可以直接通过crate名::标识符的完整限定路径来引用里面的任何项(包括过程宏),不需要额外的use语句。 - 这和你直接写
std::vec::Vec而不用use std::vec::Vec是一个道理——完整路径本身就明确了要引用的项的位置,Rust编译器能直接找到它。 - 反过来,如果想省略
tokio::前缀直接写#[main],那才需要先写use tokio::main;来把这个宏导入当前作用域。
内容的提问来源于stack exchange,提问作者rodman10
相关产品推荐
相关产品推荐

