Rust学习笔记006:代码组织

发布时间:2024年01月01日

在这里插入图片描述

Crate

  • 在Rust中,“crate” 是指 Rust 的代码单元,它可以包含一个或多个模块(modules)。Rust 的 crate 分类主要有两个方面:库(Library Crates)和二进制(Binary Crates)。此外,Rust 社区中还有一些其他类型的 crate,例如工具 crate(提供额外的构建工具)、测试 crate(专门用于测试)等。这些 crate 通常被设计用于满足特定需求或解决特定问题。
    在这里插入图片描述
  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 项目。

在这里插入图片描述

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 关键字来引入它们。
  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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模块写到文件中

在这里插入图片描述

  • 修改之前
    在这里插入图片描述

  • 之后
    在这里插入图片描述

文章来源:https://blog.csdn.net/ResumeProject/article/details/135326322
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。