第 4 部分 · State
命令式与状态
回答"状态随时间怎么改变"。异常、资源管理(Custodian)、状态机实战,最后用枢纽章把命令式、GUI、Web 串成一条线。
01
异常处理——把错误当控制流
Racket 里 `raise` 把异常抛出去,`with-handlers` 用谓词精准接住——异常不只是报错,而是一套动态控制流,沿调用栈向外逃,直到有人愿意处理它。
02
Custodian——Racket 资源的生命周期管家
Racket 给每份资源配一个 custodian 当管家:管家一关,名下的端口、线程、子管家一并收摊;父管家一断,整条子链级联坍塌。
03
红绿灯状态机——状态、转移与驱动
红绿灯自己会变——红灯到时间变绿,绿灯到时间变黄,黄灯又回到红。这件再普通不过的事,拆开看就是三件事:状态、转移、驱动。把三件事各写一段代码,一个会自己切换的红绿灯就跑起来了。
04
从状态到世界——为什么会有命令式、GUI、Web
写到这里,你已经能用 Racket 算账、处理列表、递归、管状态了。接下来要踏入一片新的地界——界面、对象、Web。在动手之前,先退一步看清:这些东西为什么存在?