quot 和 rem 函数的实现没有必要地复杂。目前它们是
(defn quot [n d] (fix (/ (- n (js-mod n d)) d))) (defn rem [n d] (- n (* d (quot n d))))
然而在 JavaScript 中所有数字已经是双精度浮点数,所以这些都是不必要的
(defn quot [n d] (fix (/ n d))) (defn rem [n d] (js-mod n d)))
要注意“rem”只是 js-mod,我不确定为什么以前没有人注意到这一点。我目前保留 js-mod,因为很多代码用它,并且如果 cljs ever grows a number tower the distinction may be important.
附加了补丁,它还
- 创建了一个 quot 和 rem 的宏版本。
- 更新了 quot、rem、js-mod 和 mod 的文档以使内容清晰。
- 使用 ES6 Math.trunc() 实现一个名为 fix 的函数(一个私有函数,用于四舍五入到 0),如果可供使用。
现有的 quot 和 rem 测试通过,尽管边缘情况可能有更好的测试(例如负小数或除数、NaN 和 ±Infinity 参数)。