quot 和 rem 函数的实现是多余的复杂。目前它们是
(defn quot [n d] (fix (/ (- n (js-mod n d)) d))) (defn rem [n d] (- n (* d (quot n d))))
然而,所有的数字在 js 中已经是双精度了,所以这些都是不必要的
(defn quot [n d] (fix (/ n d))) (defn rem [n d] (js-mod n d)))
注意,"rem" 实际上就是 js-mod,我不明白为什么之前没有人注意到这一点。目前我保留 js-mod,因为很多代码都在使用它,如果 cljs 以后发展出一个数字塔,这个区分可能很重要。
附上补丁,它还
- 为 quot 和 rem 创建了宏版本。
- 更清晰地为 quot、rem、js-mod 和 mod 更新了文档。
- 如果可用,使用 ES6 Math.trunc() 实现 fix(将数字四舍五入到最接近的整数)。
现有的 quot 和 rem 测试通过,尽管可能需要更好地测试一些边缘情况(负数或NaN、+-Infinity参数)。