限界续延:Scala 中的强大控制流机制
1. 续延简介
续延是一种强大的构造,它允许我们实现除常见的分支、循环、函数调用和异常之外的控制流机制。例如,我们可以跳回到之前的计算点,或者重新排列程序部分的执行顺序。虽然这些能力可能有些难以理解,不太适合应用程序开发者直接使用,但库实现者可以利用续延的强大功能,并以透明的方式将其提供给库用户。
续延的关键要点如下:
- 续延能让我们回到程序中的上一个点。
- 我们可以在 shift 块中捕获续延。
- 续延函数的作用范围延伸到包含它的 reset 块的末尾。
- 续延是从包含 shift 的表达式到包含它的 reset 结束的“剩余计算”,其中 shift 被替换为一个“洞”。
- 当我们使用参数调用续延时,“洞”会被设置为该参数。
- 包含 shift 表达式的代码会被重写为“续延传递风格”(CPS),直到包含它的 reset 。
- 包含 shift 但没有 reset 的方法必须使用 CPS 注解。
- 续延可用于将树结构的递归访问转换为迭代。
- 续延可以消除 Web 或 GUI 应用程序中的“控制反转”。
2. 捕获和调用续延
续延是一种让我们回到程序中先前点的机制。以读取文件为例,如果文件不存在,会抛出异常。我们可以捕获该异常并让用户提供新的文件
超级会员免费看
订阅专栏 解锁全文
391

被折叠的 条评论
为什么被折叠?



