2024 Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面,了解更多关于如何使用本站的相关信息。

0
ClojureScript

若函数在其自身主体内部递归调用自身,则调用不会检查参数数量不匹配。

5 个回答

0

评论由kamn发表

花了一些时间来查看这个问题。最初认为“复制loop/recur的行为”,但这没有考虑到多参数。看起来可能最好的方法是尝试使用analyze(analyze-fn-methods-pass2)的第二次遍历。有关函数的所有信息都已经存在,代码段的警告部分被触发,但是由于no-warn而被忽略。还有其他关于解决方案的想法吗?

0

评论由kamn发表

因此,我在寻找对这一补丁的反馈,并将尝试解释每个部分的推理。

问题是,函数只有在解析一次之后才能了解自己的参数数量。
因此,我们需要在第二次遍历中检查参数数量问题

首先,添加了两个新变量。
-activate-second-pass-warnings:布尔型 如果您想打开第二次遍历警告
-second-pass-cljs-warnings:集合 目前我们只拥有:fn-arity,但我认为最好是使其通用。

所以首先修改analyze-fn-methods-pass2函数。
在此处不使用no-warn宏,而是有一些新功能。
目标是关闭除第二次遍历警告之外的所有功能

因此,如果activate-second-pass-warnings为false,则使用no-warn,否则将使用新代码段。

还修改了default-warning-handler。在检查警告是否开启后,它会检查警告是否为第二次遍历警告,并
如果现在可以激活该警告。如果 activate-second-pass-warnings 为 false 且警告仍然存在,则意味着它是一个第二次遍历的警告。
在第二次遍历时,我们激活它。

我还尝试将所有修改都保留在 cljs.analyzer 中。

最初我将 cljs-warnings :fn-arity 设置为 false,并且它仅在第二次遍历时开启。
然而,repl 部分只是将一切设置为 true(并关闭了如 ns 错误等部分)。
因此,我决定不修改这些部分,而是保持其他文件与分析器接口一致。

0

评论由kamn发表

刚刚意识到我把补丁标记为 .md 而不是 .patch :P

0

评论者:mfikes

补丁不再适用。

0
...