第五章:模块境 · 构建术式藏经阁

“术不可一览而尽,灵不可乱而无序。将万法藏于阁中,方能道术归一。”

顾行云在编撰灵兽系统时,法术文件越写越长,变量冲突频发,灵气流转迟缓。他终于意识到:术不可杂糅一处,需分门别类,自成篇章。

他于古法中悟出一术:模块化(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修仙之道 第五章:模块境 · 构建术式藏经阁的更多相关文章

  1. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  2. java并发编程实战笔记---(第五章)基础构建模块

    . 5.1同步容器类 1.同步容器类的问题 复合操作,加容器内置锁 2.迭代器与concurrentModificationException 迭代容器用iterator, 迭代过程中,如果有其他线程 ...

  3. Python学习系列----第五章 模块

    5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: ...

  4. 【java并发编程实战】第五章:基础构建模块

    1.同步容器类 它们是线程安全的 1.1 vector和hashtable. 和Collections.synchronizeXxx()一样.实现方式就是在每个方法里面加入synchronize代码块 ...

  5. 第五章 模块之random 、hashlib、time /datetime

    5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块​def get_random_code(length=6 ...

  6. 第五章 模块之 shtil 、 json / pickle、importlib、collections

    5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...

  7. 第五章 模块之 getpass、sys、os

    5.5 getpass 密码不显示(只能在终端运行) 密码不显示(只能在终端运行) import getpass​pwd = getpass.getpass('请输入密码:')if pwd == '1 ...

  8. 第五章 模块之 logging、copy、re

    5.12 logging 日志模块 报警等级 CRITICAL = 50 # 最高FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = ...

  9. 第五章 模块之 struct、dis、正则表达式、异常处理

    5.15 struct模块 pack 能够把所有的数字都固定的转换成4字节 5.16 dis dis.dis 查看计算机指令 5.16 正则表达式 基础 正则表达式概念: 是一种规则(元字符,量词) ...

  10. 从零搭建Golang开发环境--go修仙序章

    1. 什么是go语言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态 .强类型.编译型语言 .Go 语 ...

随机推荐

  1. 【Python】配置pip使用国内镜像源

    配置pip使用国内镜像源 零.问题 使用pip安装插件时总是很慢,咋解决呢? 壹.解决 在桌面上你的文件夹内新建pip目录,一般路径如下:C:\Users\{$你的用户名},比如我的用户名是Minuy ...

  2. idhttp的socket error # 10054 错误的处理办法

    在通过http实现restful数据通讯时,死活出现: socket error # 10054 导致这种情况的原因很复杂. 同样的程序,在不同的环境中出现不同结果. 通过观察,发现登录后获取toke ...

  3. HttpRunner使用总结

    1.安装 打开cmd或cmder,输入命令:pip3 install httprunner 安装完成输入命令:hrun -V或hrun -h 检查安装是否成功 2.使用 1)新建test.yaml文件 ...

  4. ConcurrentHashMap扩容过程

    一.ConcurrentHashMap扩容过程 1.ConcurrentHashMap扩容时新建数组 1.1 每个线程负责的数据迁移区域的长度:stride 1.2 关于transferIndex的说 ...

  5. 使用注解的方式编写:@Aspect运用

    列子. public interface Calculator { // 加 public int add(int i,int j); // 减 public int sub(int i,int j) ...

  6. Spring Bean的声明方式

    一.环境说明 项目结构 StudentService package com.cookie.service; /** * @author cxq * @version 1.0 * @date 2020 ...

  7. Selenium反屏蔽处理

    Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...

  8. vscode配置xdebug断点调试thinkphp

    vscode配置xdebug断点调试thinkphp其实和配置其他php框架的断点调试一样,步骤如下: 下载xdebug,重命名为php_xdebug.dll并移动到php.ini目录: (不知道下载 ...

  9. [开源] .Net 使用 ORM 访问 人大金仓数据库

    前言 京人大金仓信息技术股份有限公司(以下简称"人大金仓")是具有自主知识产权的国产数据管理软件与服务提供商.人大金仓由中国人民大学一批最早在国内开展数据库教学.科研.开发的专家于 ...

  10. 为Java虚拟机分配堆内存大于机器物理内存会怎么样?

    之前在某个地方看到的一个问题,"如果为Java虚拟机指定的堆内存大于物理内存会怎么样?",今天正好又看到了HotSpot VM中关于为堆分配内存的源代码实现,顺便从源代码角度解答一 ...