HGQ's blog HGQ's blog
🏠首页
📚学习笔记
💻技术
  • 😋碎碎念
  • 🏞美好瞬间
🙈关于
  • 分类
  • 标签
  • 归档
  • 前端网站
  • 后端网站
  • 其他
🔗友链
GitHub (opens new window)

HuangGaoQing

一名程序员
🏠首页
📚学习笔记
💻技术
  • 😋碎碎念
  • 🏞美好瞬间
🙈关于
  • 分类
  • 标签
  • 归档
  • 前端网站
  • 后端网站
  • 其他
🔗友链
GitHub (opens new window)
  • 前端

  • rust

    • rust struct
    • rust 枚举
    • Package, Crate, Moudle
      • 个人理解
      • Package & Crate
      • Module
      • 建立module
      • Path
      • use关键字
  • 学习笔记
  • rust
huanggaoqing
2023-11-05
目录

Package, Crate, Moudle

# 个人理解

  • package → 一套解决方案
  • crate → 项目 由这些项目组成了一套结局方案
  • module → 模块 由这些模块组成了一个个的项目

# Package & Crate

  • Package
    • 包含一个Cargo.toml文件,描述了如何构建这些Crates
    • 一个Package只能包含0-1个library crate
    • 可以包含多个 binary crate
    • 必须至少包含一个crate
  • Crate类型
    • binary 二进制crate
    • library 库crate
  • Crate Root
    • 源代码文件
    • Rust编译器从这里开始,组成你Crate的根Module,编译后在对顶层会有一个名为crate的隐式根module
crate
 └── front_of_house
     ├── hosting
     │   ├── add_to_waitlist
     │   └── seat_at_table
     └── serving
         ├── take_order
         ├── serve_order
         └── take_payment
1
2
3
4
5
6
7
8
9

# Module

  • 在一个 crate 中,对代码进行分组
  • 增加可读性,易于复用
  • 控制项目item的私有性。public private
  • 模块中的内容默认为私有的,要想被外部调用需要使用 pub 关键字
  • 同级模块可以相互调用,不管是否为私有条目。父模块不能使用子模块的私有条目,子模块可以使用父模块的私有条目

# 建立module

  • mod 关键字
  • 可嵌套

# Path

  • 为了在Rust中找到某个条目,需要使用Path
  • 路径的两种形式
    • 绝对路径:从crate root开始,使用 crate名或者字面值 crate
    • 相对路径:从当前模块开始,使用 super, self 或者当前模块的标识符
    • 路径至少有一个标识符组成 ,标识符之间使用连接
mod front_of_house {
  fn cook_order() {}
  pub mod hosting {
    pub fn add_to_wait_list() {
			// 相对路径调用父级模块条目
      super::cook_order()
    }
  }
}

fn handle() {
	// 绝对路径调用
  crate::front_of_house::hosting::add_to_wait_list();
	// 相对路径调用
  self::front_of_house::hosting::add_to_wait_list();
	// 当前模块标识符调用
  front_of_house::hosting::add_to_wait_list();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# use关键字

  • 可以使用 use 关键字将路径导入到当前作用域内
    • 仍遵守私有原则
  • 惯用做法:如果条目是函数,则指定到函数的父级模块。如果条目是 sturct 或者 enum 则指定到条目本身。如果要引入两个同名的条目,则指定到父级模块,活着使用 as 关键字指定别名。
mod front_of_house {
  fn cook_order() {}
  pub mod hosting {
    pub fn add_to_wait_list() {
      super::cook_order();
      crate::front_of_house::cook_order()
    }
  }
}

// 导入模块路径到当前作用域
use crate::front_of_house::hosting;

fn handle() {
	// 直接使用导入后的路径调用
  hosting::add_to_wait_list()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
#rust
上次更新: 2024/01/15, 02:08:26
rust 枚举

← rust 枚举

最近更新
01
其他
11-04
02
后端网站
11-04
03
前端网站
11-04
更多文章>
Theme by Vdoing | Copyright © 2023-2024 HuangGaoQing | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式