@@ -40,7 +40,7 @@ typed-fsm-zig 是一种编程的思想,掌握这种思想就能方便的使用
40
40
ATM 代表自动取款机,因此它的代码的逻辑就是模拟自动取款机的一些行为:插入银行卡,输入pin,检查pin,取钱,修改pin。
41
41
42
42
它的状态机整体如下:
43
- ![ ATM] ( data /2.1-1.png)
43
+ ![ ATM] ( /images/typed-fsm-zig-images /2.1-1.png)
44
44
45
45
图中椭圆形表示状态,箭头表示消息。
46
46
它包含五种状态:exit, ready, cardInserted, session, changePin。
@@ -52,13 +52,13 @@ ATM 代表自动取款机,因此它的代码的逻辑就是模拟自动取款
52
52
这代表了一种循环,表示用户输错了pin,但是可以再次尝试输入pin,当然我们要求最多可以尝试三次。
53
53
54
54
整个程序效果如下:
55
- ![ ATM] ( data /2.1-2.png)
55
+ ![ ATM] ( /images/typed-fsm-zig-images /2.1-2.png)
56
56
57
57
这里注意消息Update, 它代表跟新pin,同时将状态转从changePin换到ready。
58
- ![ ATM] ( data /2.1-4.png)
58
+ ![ ATM] ( /images/typed-fsm-zig-images /2.1-4.png)
59
59
60
60
实际的表现就是在changePin的界面中我们修改pin,然后点击Change按钮触发Update消息,修改pin,并返回到ready界面。
61
- ![ ATM] ( data /2.1-3.png)
61
+ ![ ATM] ( /images/typed-fsm-zig-images /2.1-3.png)
62
62
63
63
接下来的文章中我将修改Update的行为,并展示在这个过程中类型系统如何帮助我快速调整代码。
64
64
@@ -78,7 +78,7 @@ ATM 代表自动取款机,因此它的代码的逻辑就是模拟自动取款
78
78
我们修改这里,把它变成.cardInserted , 这代表了我们要求跟新完pin之后进入cardInserted界面重新输入新的pin,这看着是个合理的要求。
79
79
80
80
新的状态图如下:
81
- 
81
+ 
82
82
83
83
84
84
这时如果我重新编译代码,那么类型系统就会产生下面的错误:
@@ -119,7 +119,7 @@ referenced by:
119
119
120
120
这一节中我们尝试移除changePin状态,看看类型系统会给我们什么反馈。
121
121
如果移除changePin,新的状态图如下:
122
- 
122
+ 
123
123
124
124
重新编译项目,将获得类型系统的反馈
125
125
0 commit comments