我今天找到了一个错误,最终是由于我的代码中的某个地方的代码段(我试图仅过滤列表中的“PRIMARY KEY”约束):
(filter #(= (% :constraint_type "PRIMARY KEY")) aListOfconstraints)
而不是正确的:
(filter #(= (% :constraint_type) "PRIMARY KEY") aListOfconstraints)
即。该错误是在未找到密钥的情况下采用默认参数的地图的组合效果,如:
({:a 1 :b 2} :a 0)
...并且相等的函数只接受一个参数并返回true:
(= 1) ; evals to true
我是否可以使用任何工具来促使我使用这种有效但可疑的代码?或者也许是一些我不知道的最佳实践?
答案 0 :(得分:5)
您正在寻找的最佳实践是检查代码正确行为的单元测试。
对于lint工具,您可以查看Eastwood,但在您的情况下,很难提供可以广泛使用的自定义检查。
答案 1 :(得分:5)
您可以查看kibit - 尝试使用core.logic
之上构建的规则对clojure代码执行静态分析的工具。添加新规则应该不难,但此工具也有局限性 - 请参阅项目说明。
答案 2 :(得分:2)