🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐳Java基础:Java基础_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
🐠离散数学:离散数学_IT闫的博客-CSDN博客
🥽Linux:Linux_Y小夜的博客-CSDN博客
🚝Rust:Rust_Y小夜的博客-CSDN博客
欢迎收看,希望对大家有用!
目录
🎯use关键字
🎯惯用use路径
🎯使用as关键字起别名
🎯使用pub use 重新导出名称
🎯使用外部包(package)
🎯使用嵌套路径清理大量使用的use语句
🎯use关键字
可以使用
use
关键字创建一个短路径,然后就可以在作用域中的任何地方使用这个更短的名字。mod front_of_house {pub mod hosting {pub fn add_to_waitlist() {}} }use crate::front_of_house::hosting;pub fn eat_at_restaurant() {hosting::add_to_waitlist(); }
注意 :
use
只能创建use
所在的特定作用域内的短路径。
🎯惯用use路径
- 使用
use
将函数引入作用域的习惯用法。要想使用use
将函数的父模块引入作用域,我们必须在调用函数时指定父模块,这样可以清晰地表明函数不是在本地定义的,同时使完整路径的重复度最小化。- 另一方面,使用
use
引入结构体、枚举和其他项时,习惯是指定它们的完整路径。use std::collections::HashMap;fn main() {let mut map = HashMap::new();map.insert(1, 2); }
这个习惯用法有一个例外,那就是我们想使用
use
语句将两个具有相同名称的项带入作用域,因为 Rust 不允许这样做。use std::fmt; use std::io;fn function1() -> fmt::Result {// --snip-- }fn function2() -> io::Result<()> {// --snip-- }
🎯使用as关键字起别名
使用
use
将两个同名类型引入同一作用域这个问题还有另一个解决办法:在这个类型的路径后面,我们使用as
指定一个新的本地名称或者别名。use std::fmt::Result; use std::io::Result as IoResult;fn function1() -> Result {// --snip-- }fn function2() -> IoResult<()> {// --snip-- }
🎯使用pub use 重新导出名称
使用
use
关键字,将某个名称导入当前作用域后,这个名称在此作用域中就可以使用了,但它对此作用域之外还是私有的。如果想让其他人调用我们的代码时,也能够正常使用这个名称,就好像它本来就在当前作用域一样,那我们可以将pub
和use
合起来使用。这种技术被称为 “重导出(re-exporting)”:我们不仅将一个名称导入了当前作用域,还允许别人把它导入他们自己的作用域。
🎯使用外部包(package)
在前面我们编写了一个猜猜看游戏。那个项目使用了一个外部包,
rand
,来生成随机数。为了在项目中使用rand
,在 Cargo.toml 中加入了如下行:rand = "0.8.5"
在 Cargo.toml 中加入
rand
依赖告诉了 Cargo 要从 crates.io 下载rand
和其依赖,并使其可在项目代码中使用。接着,为了将
rand
定义引入项目包的作用域,我们加入一行use
起始的包名,它以rand
包名开头并列出了需要引入作用域的项。回忆一下第二章的 “生成一个随机数” 部分,我们曾将Rng
trait 引入作用域并调用了rand::thread_rng
函数:use rand::Rng;fn main() {let secret_number = rand::thread_rng().gen_range(1..=100); }
注意
std
标准库对于你的包来说也是外部 crate。因为标准库随 Rust 语言一同分发,无需修改 Cargo.toml 来引入std
,不过需要通过use
将标准库中定义的项引入项目包的作用域中来引用它们。
🎯使用嵌套路径清理大量使用的use语句
如
// --snip-- use std::{cmp::Ordering, io}; // --snip--
我们可以在路径的任何层级使用嵌套路径,这在组合两个共享子路径的
use
语句时非常有用。use std::io; use std::io::Write;
两个路径的相同部分是
std::io
,这正是第一个路径。为了在一行use
语句中引入这两个路径,可以在嵌套路径中使用self。
use std::io::{self, Write};
如果希望将一个路径下 所有 公有项引入作用域,可以指定路径后跟
*
,glob 运算符:use std::collections::*;