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(四舍五入到 0)。
现有的 quot 和 rem 测试通过,尽管可能需要更好的边缘情况测试(负小数或除数,NaN 和 +-Infinity 参数)。