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