【Rust自学】7.5. use关键字 Pt.2 :重导入与换国内镜像源教程
7.5 use关键字 Pt.2 重导出与换国内镜像源教程7.5.1. 使用pub use重新导出名称使用use将路径导入作用域内后该名称在词法作用域内是私有的。以 7.4. use关键字 Pt.1use的使用与as关键字 的代码为例mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } fn seat_at_table() { } } } use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist(); }对于外部代码来说,eat_at_restaurant是可以访问到的因为它在声明时使用了pub关键字但eat_at_restaurant下使用的add_to_waitlist外部代码是看不见的因为use引入默认是私有的。如果想要外部代码也能访问到就需要在use前增加pub关键字mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } fn seat_at_table() { } } } pub use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist(); }这样子就可以让外部代码访问到use引入的条目。当我们想要对外暴露代码的时候我们可以使用这种技术不按照内部代码的结构而是做一些调整来对外进行暴露。这样代码内部的结构和外边看到的可能就会有点不一样。毕竟写代码的人和调用代码的人他们所期望的东西通常是不一样的。最后总结一下:pub use重导出既可以将该条目引入作用域也可以使该条目被外部代码引入到它们的作用域。7.5.2. 使用外部的包(package)首先要在Cargo.toml里添加依赖项的包(package)名与版本而Cargo会从crates.io这个网站上下载这个包和这个包的依赖项到本地也可以用野生的crate去GitHub找但非常不建议这么做。然后就是在代码里使用use将特定条目引入到作用域。还记得 2.2. 猜数游戏 Pt.2 生成随机数 吗那时候我们需要rand包来生成随机数现在我们还是以引入rand包来举例Step 1修改Cargo.toml打开项目的Cargo.toml文件在[dependencies]下写上包名和版本中间用连接如下[package] name RustStudy version 0.1.0 edition 2021 [dependencies] rand 0.8.5Step 2在源代码中引入包你想用包下的什么东西就用use指定对应的路径来引入即可。这里我需要生成随机数的方法所以要把Rng这个 trait 引入作用域引入这行的代码如下use rand::Rng;Rust语言的标准库std也被当作是外部的包但是它已经内置在Rust语言内了所以就不需要在Cargo.toml里增加依赖项了直接在源代码中用use引入就行这有点类似于Python中的re、os、ctype这类库。比如说我们想要引入std下的collections模块的HashMap这个结构体就应该写use std::collections::HashMap;但不用修改Cargo.toml。7.5.3. 使用嵌套路径清理大量的use语句有的时候使用同一个包或模块下的多个条目前面部分都是一样的但是还是得写几遍占用几行如果引入的东西比较多需要写很多遍根本不现实所以Rust允许使用嵌套路径在同一行内来简化引入的代码。类似于bash的花括号展开特性。其格式如下:use 同样的部分::{不同的部分1, 不同的部分2, ...}看个例子use std::cmp::Ordering; use std::io;它们有公共的部分std所以就可以用嵌套路径写为use std::{cmp::Ordering, io};如果其中一个引用是另外一个引用的子路径Rust还允许在使用嵌套路径时使用self关键字如下例use std::io; use std::io::Write;这部分就可以简写为:use std::io::{self, Write};7.5.4. 通配符*使用*可以把路径中所有的公共条目都引入到作用域。比如我想把std库下collections模块所有的公共条目都引入进去就可以这么写use std::collections::*;但是这种引入要非常谨慎的使用通常不这样用。它的应用场景是- 在测试的时候把所有被测试的代码引入到test模块- 有时候被用于预导入(prelude)模块7.5.5. 给Rust依赖项下载换源由于crates.io的网站在国外所以国内下载很慢可以换成清华大学镜像。注意Cargo 读取的配置文件在用户目录下的.cargo里而不是项目根目录。Windows 上默认路径是%USERPROFILE%\.cargo\config.toml也就是用户文件夹下的.cargo\config.toml。打开Windows TerminalWin11自带Win10需要去微软商店里下载不花钱先确保.cargo目录存在然后进入该目录mkdir %USERPROFILE%\.cargo cd %USERPROFILE%\.cargo如果还没有配置文件可以新建一个文件名推荐config.toml如果文件已经存在不要用下面这条命令覆盖直接编辑即可type nul config.toml编辑它输入如下指令回车vim config.toml把这段贴进去清华大学当前推荐的稀疏索引写法需要 Cargo 1.68 及以上[source.crates-io] replace-with tuna [source.tuna] registry sparsehttps://mirrors.tuna.tsinghua.edu.cn/crates.io-index/把光标不是鼠标指针下移从移到然后输入:wq再按回车就会保存。然后再重新build你的项目就可以。