如何重构 Clojure 源代码,尤其是重命名地图集合的关键字?

问题描述

我在开发Clojure项目时,有时会遇到这样的情况:地图集合的关键字重命名有些困难。

例如,如果我有一个由多个命名空间共享的地图集合。然后,这些命名空间将取决于此映射集合的关键字,因为在这些命名空间中定义的函数使用映射销毁语法。当我重命名这个地图集合的关键字时,我肯定需要彻底检查那些命名空间。

在这种情况下,有什么工具或有效的方法可以使用吗?

解决方法

当您使用不合格的 :x 表示四十种不同的含义,然后决定重命名其中一个时,这将是一个挑战。如果您没有(并且不想制作)足以检测预期参数丢失的测试用例,那么挑战就会变得令人头疼。

下次,考虑为将广泛使用的用途指定(唯一)命名空间限定的关键字。替换是明确的,工具更有可能将其自动化。

一些语言功能可以帮助您重新编写代码,具体取决于您决定重命名内容的范围的规模。

先决条件给你一个地方来断言一个解构的论点(或者只是记录它,如果你需要逐个判断成功)。

纯函数允许您克隆一堆代码,重命名克隆版本中的内容(或修改任何逻辑),然后并行运行两个版本并断言它们想出了相同的结果。例如,将函数 f 克隆为 f-1f-2,返工 f-2,并重新编程 f,使其同时调用 f-1 和 {{1 }} 并断言结果相同。当他们同意时,您可以删除原件。

测试使用内置的 f-2 非常容易(并且还有更精细的替代方案)。