欢迎!有关如何工作的更多信息,请参阅 关于 页面。
你好,
我注意到以下几点
user> (-> '(some-> 1 inc) clojure.walk/macroexpand-all (clojure.pprint/pprint )) (let* [G__427566 1] (if (clojure.core/nil? G__427566) nil (inc G__427566)))
特别是,对于编译时已知的值,如标量,在运行时不应对其进行空值测试。
更实际的用例可以在这里找到: https://github.com/clojure-emacs/refactor-nrepl/blob/cb939222d45bc20926202868922bd3e457d59b8f/src/refactor_nrepl/ns/tracker.clj#L33-L35
修复此问题将提高性能,并且会使得 Eastwood 等代码检查工具满意(我正在对其进行调整以排除此错误)
检查“运行时已知的值”是一个复杂的实现操作,此模式有简单的解决方案(并且可能由于 JIT 而在大多数情况下在小范围内提高了性能)。因此,我不太确定这样做是否有意义。