库(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 项目。
//假设结构如下
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();
}
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
关键字来引入它们。引入整个模块:
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
模块中所有的项都引入到当前作用域中,使得你可以直接使用这些项而不需要使用限定路径的方式。但需要注意的是,通配符引入可能会导致命名冲突,因此需要谨慎使用。
修改之前
之后