Rust的代码组织
代码组织主要包括:
哪些细节是可以暴露;哪些细节是私有的
作用域内哪些名称有效
模块系统
package(包):cargo的特性,让你构建、测试、共享ctrate
crate(单元包):一个模块树 ,它可以产生一个library或者可执行文件
module(模块)、use:让你控制代码的组织、作用域、私有路径
path(路径): 为struct、function或module等命名的方式
pacakge crate
crate的类型:
- binary
- library
Crate Root
- 是源代码文件
- Rust编译器从这里开始,组成你的crate的根module
一个package:
- 包含一个cargo.toml,它描述了如何构建这些crates
- 只能包含0-1个library crate
- 可以包含任意数量的binary crate
- 但是至少包含一个crate
cargo的惯例
crate的作用
将相关功能组合到一个作用域内,便于在项目之间进行共享
定义module来控制作用域和私有性
path
相对路径 绝对路径
super表示父级模块(目录)
私有边界
pub关键字 把条目声明为公有的
pub struct声明公有的结构体,字段默认是私有的
pub 加字段 ,来设置公有字段
pub enum
- enum是公共的
- enum的变体也是公共的
文件的根级模块可以互相调用,无论公有私有
use关键字
可以使用use关键字将路径导入到作用域内
仍然遵循私有性原则
使用绝对路径的例子
使用相对路径的例子
引入函数时一般引入上一级,既能与本地定义区分,又不至于代码过于复杂
引入结构体、枚举、其它,指定完整路径(指定到本身) 如果存在同名,引用到父级
引入时如果存在同名模块,可以起别名
use std::io::Result as IoResult
使用pub use重新导出名称 ,使用use时该名称在此作用域内是私有的。
pub use:重导出
- 该条目引入作用域
- 该条目可以被外部代码引入到它们的作用域
使用外部包package
## 步骤及问题解决
1
等待一段时间,齿轮仍在转
停掉rust server
打开命令行
cargo build
ctrl+c退出
删除package-cache
回到刚才目录执行cargo build
下载速度慢 因为是国外网站,可以换国内镜像
- 进入 .cargo文件夹
- 新建config
- 编辑config
- 粘贴进去
- wq保存退出
- 打开rust server
使用嵌套路径清理大量的use语句
如果使用同一个包或者模块下的多个条目
可以使用嵌套路径在同一行内将上述条目引入
路径相同的部分::{路径差异的部分}
通配符*
使用*可以把路径中所有的公共条目都引入到作用域
谨慎使用
将模块拆分为不同文件