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 语 ...
随机推荐
- 【单片机】滑稽AT89C52表情实现
[单片机]滑稽AT89C52表情实现 零.原因 在群里看到了这样一个表情: 这是用51做的,刚好开发板上有8个小灯,想实现一下. 一.代码 新建工程,写入如下代码: #include<reg52 ...
- RuoYi-vue配置记录
如果这个项目能顺利运行,标志着Springboot+vue的前后端环境都配好了. 一.官方文档 若依官方文档:介绍 | RuoYi,在这个地方克隆/下载项目源代码https://gitee.com/y ...
- SQL SERVER日常运维巡检系列之-实例级参数
前言 做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期.结果进行登记,同时可能需要出一份巡检报告. 本系列旨在解决一些常见的困扰: 不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻 ...
- EagleOS 9.5-基于AlmaLinux 9.5深度定制优化
EagleOS 9.5 说明文档 一.系统简介 EagleOS 9.5基于AlmaLinux 9.5进行深度定制优化. EagleOS 9.5根据AlmaLinux 9.5官方AlmaLinux-9. ...
- 从源码解析 QGraphicsItem 旋转、缩放、平移、transform等变换操作,利用QGraphicsTransform实现变形动画
QGraphicsItem 有3种方式进行变换:1. 最简单方便的是使用 setRotation() .setScale():2. 使用 setTransform() 进行复杂变换:3. 还可以使用 ...
- 探秘Transformer系列之(24)--- KV Cache优化
探秘Transformer系列之(24)--- KV Cache优化 目录 探秘Transformer系列之(24)--- KV Cache优化 0x00 前言 0x01 背景知识 1.1 度量指标 ...
- Javascript+webdriverio实现app自动化demo
1.新建工程和安装库 使用WebStorm新建一个空项目然后在编辑器打开终端输入如下命令: npm init -y npm install webdriverio npm install sleep ...
- 康谋产品 | 用于ADAS和AD传感器的独立数据采集设备
一.产品简介 在 ADAS/AD 环境中,如果想要将原始数据与摄像头.雷达或激光雷达等传感器分离,总是会使用测量数据转换器.借助MDILink,您可以获得一个SerDes测量数据转换器,从开发阶段和验 ...
- 【经验】WakeUp、Outlook、Google日历导入飞书日历
以飞书团队账号登录时,设置的日历就能被团队其他成员看到(可选择私密.仅忙碌[默认].完全公开三种模式),以便相互查看空闲时间. Wakeup日历导出到Outlook日历 Wakeup支持从各大学校便利 ...
- 私有网盘部署-Cloudreve网盘
前言 关于私有网盘,企业级网盘可选可道云,filebroser,seafile等.关于私有网盘,笔者推荐Cloudreve. 无论是从使用角度看,WebDa.离线下载.分享管理.文件检索,还是管理角度 ...