Lv777

Lv777

github
twitter
jike
playstation
xiaoyuzhou

模块

package#

package 是一个或多个 crate 组成的集合. Cargo 项目是一个包.

一个包能包含一个或多个二进制项,但只能包含一个库。这是为啥??要发布的原因吗。要创建其他二进制项,将文件放在 src/bin 目录下即可被编译成独立的二进制文件.

crate#

crate 分为二进制项, Cargo 创建的默认模板就只包含一个二进制项,约定 src/main.rs 是入口根文件. Cargo 还约定 src/lib.rs 为库的根文件.

编译一个 crate 从根文件开始寻找需要的代码.

mod#

mod 用来将 crate 的代码分组,也可以为模块创建子模块,模块中的代码默认私有.

mod web {
	mod client {
		mod home {}
		fn get_env() {}
	}
	mod server {
		struct DTO {
			id: String
		}
	}
}

路径#

  • 绝对路径 由 crate 名 (同一个 crate 使用 crate) 开头的全路径.
  • 相对路径 从当前模块出发使用 self, super 和模块名定位的路径.

use#

使用 use 关键字引入可访问模块即可直接使用该模块作用域的内容,和 JS 的 import 类似.

  • 对于函数的引入,习惯引入其父模块并在调用时指定,有些 call(this) 的感觉.
  • 对于结构体、枚举等,习惯引用完整路径并直接使用.
use web::client;

use web::server::DTO;

client.get_env();

DTO {
	id: String::from(""),
};
// 重导出
pub use web::server;
// 嵌套引入
use web::{self, server::DTO};
// 引入 web 所有公开子模块
use web::*;

模块文件#

把一个大的模块拆分为多个文件更有利于阅读,和前端模块化的思路一致.

web
├── client
│	└── home.rs
└── server.rs
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。