Rust修仙之道 第五章:模块境 · 构建术式藏经阁
第五章:模块境 · 构建术式藏经阁
“术不可一览而尽,灵不可乱而无序。将万法藏于阁中,方能道术归一。”
顾行云在编撰灵兽系统时,法术文件越写越长,变量冲突频发,灵气流转迟缓。他终于意识到:术不可杂糅一处,需分门别类,自成篇章。
他于古法中悟出一术:模块化(Modularization)。
一、mod
之术:建立灵术篇章
顾行云开始划分篇章,例如将灵兽相关逻辑存于 spirit.rs
:
// 文件:spirit.rs
pub struct Spirit {
pub name: String,
pub power: u32,
}
在主术式中引用它:
mod spirit;
use spirit::Spirit;
fn main() {
let s = Spirit { name: "凤影".to_string(), power: 99 };
println!("召唤灵兽:{}(力量:{})", s.name, s.power);
}
mod
为藏经阁入口,use
则是借阅灵术之匙。
二、pub
之印:通灵共享符
他发现没有加 pub
的灵术成员在主法术中不可见。于是领悟“公开之印”:
默认模块内容私有;
pub
标记后,方可他处引用。
即:
pub fn summon() { /* ... */ }
三、层叠藏经阁:嵌套模块奥义
他进一步构建层级法藏:
src/
├── main.rs
├── beast/
│ ├── mod.rs
│ ├── fire.rs
│ └── ice.rs
在 mod.rs
中:
pub mod fire;
pub mod ice;
主程序中:
mod beast;
use beast::fire::ignite;
fn main() { ignite();
}
顾行云笑道:“藏术有序,调术有道。”
附术:藏经阁里的试炼封印
在每个模块中也可内设试炼术:
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_spirit_power() {
let s = Spirit { name: "雷狐".into(), power: 100 };
assert_eq!(s.power, 100);
}
}
模块诀 · 藏术之理
术不可散而无理,亦不可繁而不藏;藏之以篇,引之以匙,掌之以印,试之以封。
https://www.cnblogs.com/niceWk/p/18971749## 第五章:模块境 · 构建术式藏经阁
“术不可一览而尽,灵不可乱而无序。将万法藏于阁中,方能道术归一。”
顾行云在编撰灵兽系统时,法术文件越写越长,变量冲突频发,灵气流转迟缓。他终于意识到:术不可杂糅一处,需分门别类,自成篇章。
他于古法中悟出一术:模块化(Modularization)。
一、mod
之术:建立灵术篇章
顾行云开始划分篇章,例如将灵兽相关逻辑存于 spirit.rs
:
// 文件:spirit.rs
pub struct Spirit {
pub name: String,
pub power: u32,
}
在主术式中引用它:
mod spirit;
use spirit::Spirit;
fn main() {
let s = Spirit { name: "凤影".to_string(), power: 99 };
println!("召唤灵兽:{}(力量:{})", s.name, s.power);
}
mod
为藏经阁入口,use
则是借阅灵术之匙。
二、pub
之印:通灵共享符
他发现没有加 pub
的灵术成员在主法术中不可见。于是领悟“公开之印”:
默认模块内容私有;
pub
标记后,方可他处引用。
即:
pub fn summon() { /* ... */ }
三、层叠藏经阁:嵌套模块奥义
他进一步构建层级法藏:
src/
├── main.rs
├── beast/
│ ├── mod.rs
│ ├── fire.rs
│ └── ice.rs
在 mod.rs
中:
pub mod fire;
pub mod ice;
主程序中:
mod beast;
use beast::fire::ignite;
fn main() { ignite();
}
顾行云笑道:“藏术有序,调术有道。”
附术:藏经阁里的试炼封印
在每个模块中也可内设试炼术:
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_spirit_power() {
let s = Spirit { name: "雷狐".into(), power: 100 };
assert_eq!(s.power, 100);
}
}
模块诀 · 藏术之理
术不可散而无理,亦不可繁而不藏;藏之以篇,引之以匙,掌之以印,试之以封。
️ 上一章 [下一章 待续️]
Rust修仙之道 第五章:模块境 · 构建术式藏经阁的更多相关文章
- Spring实战第五章学习笔记————构建Spring Web应用程序
Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...
- java并发编程实战笔记---(第五章)基础构建模块
. 5.1同步容器类 1.同步容器类的问题 复合操作,加容器内置锁 2.迭代器与concurrentModificationException 迭代容器用iterator, 迭代过程中,如果有其他线程 ...
- Python学习系列----第五章 模块
5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: ...
- 【java并发编程实战】第五章:基础构建模块
1.同步容器类 它们是线程安全的 1.1 vector和hashtable. 和Collections.synchronizeXxx()一样.实现方式就是在每个方法里面加入synchronize代码块 ...
- 第五章 模块之random 、hashlib、time /datetime
5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块def get_random_code(length=6 ...
- 第五章 模块之 shtil 、 json / pickle、importlib、collections
5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...
- 第五章 模块之 getpass、sys、os
5.5 getpass 密码不显示(只能在终端运行) 密码不显示(只能在终端运行) import getpasspwd = getpass.getpass('请输入密码:')if pwd == '1 ...
- 第五章 模块之 logging、copy、re
5.12 logging 日志模块 报警等级 CRITICAL = 50 # 最高FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = ...
- 第五章 模块之 struct、dis、正则表达式、异常处理
5.15 struct模块 pack 能够把所有的数字都固定的转换成4字节 5.16 dis dis.dis 查看计算机指令 5.16 正则表达式 基础 正则表达式概念: 是一种规则(元字符,量词) ...
- 从零搭建Golang开发环境--go修仙序章
1. 什么是go语言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态 .强类型.编译型语言 .Go 语 ...
随机推荐
- 【Python】配置pip使用国内镜像源
配置pip使用国内镜像源 零.问题 使用pip安装插件时总是很慢,咋解决呢? 壹.解决 在桌面上你的文件夹内新建pip目录,一般路径如下:C:\Users\{$你的用户名},比如我的用户名是Minuy ...
- idhttp的socket error # 10054 错误的处理办法
在通过http实现restful数据通讯时,死活出现: socket error # 10054 导致这种情况的原因很复杂. 同样的程序,在不同的环境中出现不同结果. 通过观察,发现登录后获取toke ...
- HttpRunner使用总结
1.安装 打开cmd或cmder,输入命令:pip3 install httprunner 安装完成输入命令:hrun -V或hrun -h 检查安装是否成功 2.使用 1)新建test.yaml文件 ...
- ConcurrentHashMap扩容过程
一.ConcurrentHashMap扩容过程 1.ConcurrentHashMap扩容时新建数组 1.1 每个线程负责的数据迁移区域的长度:stride 1.2 关于transferIndex的说 ...
- 使用注解的方式编写:@Aspect运用
列子. public interface Calculator { // 加 public int add(int i,int j); // 减 public int sub(int i,int j) ...
- Spring Bean的声明方式
一.环境说明 项目结构 StudentService package com.cookie.service; /** * @author cxq * @version 1.0 * @date 2020 ...
- Selenium反屏蔽处理
Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...
- vscode配置xdebug断点调试thinkphp
vscode配置xdebug断点调试thinkphp其实和配置其他php框架的断点调试一样,步骤如下: 下载xdebug,重命名为php_xdebug.dll并移动到php.ini目录: (不知道下载 ...
- [开源] .Net 使用 ORM 访问 人大金仓数据库
前言 京人大金仓信息技术股份有限公司(以下简称"人大金仓")是具有自主知识产权的国产数据管理软件与服务提供商.人大金仓由中国人民大学一批最早在国内开展数据库教学.科研.开发的专家于 ...
- 为Java虚拟机分配堆内存大于机器物理内存会怎么样?
之前在某个地方看到的一个问题,"如果为Java虚拟机指定的堆内存大于物理内存会怎么样?",今天正好又看到了HotSpot VM中关于为堆分配内存的源代码实现,顺便从源代码角度解答一 ...