事实上,并不是这样,也不是完全的。kondo 的类型检查系统有些拼凑。每次做条件类型检查时,都不得不输入一个自定义函数,例如。
对于 core.into,kondo 有一个自定义函数,表示返回类型应与作为其第一个参数传入的集合类型相同。已经在他们的 JIRA 票据板上创建了一个任务,将其添加到另一个函数中,而且它不适用于其他一些函数,比如函数 inc。如果你给 inc 传递一个 int,Kondo 就不知道输出是否仍然是 int。
I. E.
此代码:nth [1 2 3] 1.5 在 kondo 中抛出一个错误(顺便说一下,这是不正确的,nth 对于非整数是定义好的)
但是这段代码(nth [1 2 3] (inc 0.5))运行没有报错。
如果这种情况持续下去,Kondo 最终可能需要包含大量的逻辑,这些逻辑不一定属于他们的代码库。
我不确定进行这种分析的正确逻辑是否应该在 Kondo 本身,或者是否应该位于 Clojure 代码库的某个部分,因为它完全依赖于 Clojure 的 API。我也不知道 spec 或 spec2 是否是存放它的合适位置。这就是为什么我在这提出了这个问题。