欢迎!请查看 关于 页面,了解有关此内容的更多信息。
嗨,
我注意到以下情况
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 而可能在大多数情况下略有性能提升)。因此,我不认为这样做有意义。