知识卡片

递归枚举:描述而非计算

专业/工作 · 631.b

内容

函数的职责是计算——接收输入产出结果;枚举的职责是描述——刻画一份数据可能呈现的几种 形态,本身不具备运算能力。当某个[[枚举原始值与相关值的区别|相关值]]的类型正好是枚举自身 时(用 indirect 关键字标记),枚举就能描述递归结构:一个复合四则运算表达式可以由更小的 表达式作为运算数嵌套组成,恰好对应枚举成员的相关值又是同一个枚举类型的实例。真正执行 运算仍需要另外编写一个递归函数去遍历这棵结构。发散:这体现了”数据结构”和”处理这份数据 的算法”两件事的解耦——递归枚举把”表达式长什么样”描述清楚,把”如何求值”这件事完全留给 外部函数,两者可以独立演化。

参考来源

《Swift 4从零到精通iOS开发》第6章《高级运算符与枚举》