Crate
- 在Rust中,“crate” 是指 Rust 的代码单元,它可以包含一个或多个模块(modules)。Rust 的 crate 分类主要有两个方面:库(Library Crates)和二进制(Binary Crates)。此外,Rust 社区中还有一些其他类型的 crate,例如工具 crate(提供额外的构建工具)、测试 crate(专门用于测试)等。这些 crate 通常被设计用于满足特定需求或解决特定问题。
-
库(Library Crates):
库 crate 是为了提供可重用的代码而设计的。它可以被其他程序引用,并在其它 crate 中使用。库 crate 可以包含一系列模块,结构体,函数等,以便其他人或你自己可以通过引用它来使用这些功能。
创建一个库 crate,你可以使用
cargo
命令行工具:cargo new my_library --lib
这将创建一个名为
my_library
的库 crate 项目。 -
二进制(Binary Crates):
二进制 crate 是可执行的程序,它包含了 main 函数,可以直接运行。这种 crate 主要用于构建独立的应用程序,而不是作为库供其他 crate 使用。
创建一个二进制 crate,你可以使用
cargo
命令行工具:cargo new my_binary --bin
这将创建一个名为
my_binary
的二进制 crate 项目。
module
path路径
//假设结构如下
my_project/
|-- src/
| |-- main.rs
| |-- module1.rs
| |-- module2.rs
|-- Cargo.toml
// main.rs的代码如下
// module1的绝对路径
mod module1;
use crate::module1::hello_from_module1;
// module2的相对路径
mod module2;
use self::module2::hello_from_module2;
fn main() {
hello_from_module1();
hello_from_module2();
}
- pub修饰struct时
pub关键字
super关键字
- 在 Rust 中,
super
关键字用于引用父级模块或父级作用域中的实体。它通常用于在子模块中访问父模块的定义、调用父级作用域中的函数或访问父级的路径等情况下。类似linux命令..
例如,假设有以下代码结构:
// 父模块
mod parent_mod {
pub fn parent_function() {
println!("这是父模块的函数!");
}
}
// 子模块
mod child_mod {
use super::parent_function; // 使用 super 引用父模块中的函数
pub fn child_function() {
println!("这是子模块的函数!");
parent_function(); // 调用父模块的函数
}
}
fn main() {
child_mod::child_function(); // 调用子模块的函数
}
use关键字
- 当你想要在 Rust 中使用一个模块(或者模块中的项)时,可以使用
use
关键字来引入它们。
-
引入整个模块:
use crate::module::submodule;
这个语法将整个
module::submodule
模块引入到当前作用域中,使得你可以直接使用其中的项而不需要使用限定路径的方式。 -
引入特定项:
use crate::module::submodule::item;
这个语法将
module::submodule::item
项引入到当前作用域中,使得你可以直接使用它而不需要使用限定路径的方式。 -
使用别名:
use crate::module::submodule::item as alias;
这个语法将
module::submodule::item
项引入到当前作用域中,并给它起一个别名alias
,这样你可以使用alias
来代替原始的项名。 -
通配符引入:
use crate::module::submodule::*;
这个语法将
module::submodule
模块中所有的项都引入到当前作用域中,使得你可以直接使用这些项而不需要使用限定路径的方式。但需要注意的是,通配符引入可能会导致命名冲突,因此需要谨慎使用。
pub use
- What is the difference between
use
andpub use
?
模块写到文件中
-
修改之前
-
之后