欢迎!有关如何使用本网站的更多信息,请参阅关于 页面。
你好,
我注意到以下内容
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
修复这个问题将提高性能,并且另外也会使类似的lint工具,如Eastwood,更为满意(我现在正在调整它以忽略这个错误)
检查“运行时已知的值”是一个非平凡的实现操作,且此模式有简单的解决方案(而且由于jit,在大多数情况下可能对性能的改进是微小的)。因此,我不确定这样做是否合理。