4

我今天发现了一个错误,该错误最终是由我的代码中某处的以下片段引起的(我试图在列表中仅过滤“主键”约束):

(filter #(= (% :constraint_type "PRIMARY KEY")) aListOfconstraints)

而不是正确的:

(filter #(= (% :constraint_type) "PRIMARY KEY") aListOfconstraints)

即错误是在未找到密钥的情况下采用默认参数的映射的组合效果,如:

({:a 1 :b 2} :a 0)

... 以及仅接受一个参数并返回 true 的 equal 函数:

(= 1) ; evals to true

有没有我可以使用的工具来提示我输入这种有效但可疑的代码?或者也许是我不知道的一些最佳实践?

4

4 回答 4

5

您正在寻找的最佳实践是检查代码的正确行为的单元测试。

对于 lint 工具,您可以查看Eastwood,但在您的情况下,很难提供可以广泛使用的自定义检查。

于 2013-02-10T11:43:51.443 回答
5

您可以查看kibit - 工具,该工具尝试使用构建在core.logic. 添加新规则应该不是那么难,但是这个工具也有限制 - 参见项目的描述。

于 2013-02-10T12:21:13.070 回答
3

如果你有这种问题,最好使用右缩进。在你的情况下

(filter #(= (% :constraint_type)
            "PRIMARY KEY")
        aListOfconstraints)

如果你有

(filter #(= (% :constraint_type "PRIMARY KEY")
            )
        aListOfconstraints)

你显然可以注意到一个错误。

于 2013-02-10T12:22:18.780 回答
2

早先的答案中提到的 Eastwood 现在能够在 2014 年初解决您的特定问题以及其他几种问题。看看:https ://github.com/jonase/eastwood

于 2014-11-05T01:34:07.873 回答