Rust学习笔记006:代码组织

Rust学习笔记006:代码组织_第1张图片

Crate

  • 在Rust中,“crate” 是指 Rust 的代码单元,它可以包含一个或多个模块(modules)。Rust 的 crate 分类主要有两个方面:库(Library Crates)和二进制(Binary Crates)。此外,Rust 社区中还有一些其他类型的 crate,例如工具 crate(提供额外的构建工具)、测试 crate(专门用于测试)等。这些 crate 通常被设计用于满足特定需求或解决特定问题。
    Rust学习笔记006:代码组织_第2张图片
  1. 库(Library Crates):

    库 crate 是为了提供可重用的代码而设计的。它可以被其他程序引用,并在其它 crate 中使用。库 crate 可以包含一系列模块,结构体,函数等,以便其他人或你自己可以通过引用它来使用这些功能。

    创建一个库 crate,你可以使用 cargo 命令行工具:

    cargo new my_library --lib
    

    这将创建一个名为 my_library 的库 crate 项目。

  2. 二进制(Binary Crates):

    二进制 crate 是可执行的程序,它包含了 main 函数,可以直接运行。这种 crate 主要用于构建独立的应用程序,而不是作为库供其他 crate 使用。

    创建一个二进制 crate,你可以使用 cargo 命令行工具:

    cargo new my_binary --bin
    

    这将创建一个名为 my_binary 的二进制 crate 项目。

Rust学习笔记006:代码组织_第3张图片

module

Rust学习笔记006:代码组织_第4张图片

Rust学习笔记006:代码组织_第5张图片
Rust学习笔记006:代码组织_第6张图片

path路径

Rust学习笔记006:代码组织_第7张图片

//假设结构如下
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();
}

Rust学习笔记006:代码组织_第8张图片

  • pub修饰struct时
    Rust学习笔记006:代码组织_第9张图片

pub关键字

Rust学习笔记006:代码组织_第10张图片

Rust学习笔记006:代码组织_第11张图片

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 关键字来引入它们。
  1. 引入整个模块:

    use crate::module::submodule;
    

    这个语法将整个 module::submodule 模块引入到当前作用域中,使得你可以直接使用其中的项而不需要使用限定路径的方式。

  2. 引入特定项:

    use crate::module::submodule::item;
    

    这个语法将 module::submodule::item 项引入到当前作用域中,使得你可以直接使用它而不需要使用限定路径的方式。

  3. 使用别名:

    use crate::module::submodule::item as alias;
    

    这个语法将 module::submodule::item 项引入到当前作用域中,并给它起一个别名 alias,这样你可以使用 alias 来代替原始的项名。

  4. 通配符引入:

    use crate::module::submodule::*;
    

    这个语法将 module::submodule 模块中所有的项都引入到当前作用域中,使得你可以直接使用这些项而不需要使用限定路径的方式。但需要注意的是,通配符引入可能会导致命名冲突,因此需要谨慎使用。

pub use

Rust学习笔记006:代码组织_第12张图片

  • What is the difference between use and pub use?

Rust学习笔记006:代码组织_第13张图片
Rust学习笔记006:代码组织_第14张图片
在这里插入图片描述
Rust学习笔记006:代码组织_第15张图片

模块写到文件中

在这里插入图片描述

  • 修改之前
    Rust学习笔记006:代码组织_第16张图片

  • 之后
    Rust学习笔记006:代码组织_第17张图片

你可能感兴趣的:(语言学习笔记,rust,学习,笔记)