请分享您的看法,参加2024 Clojure状态调查!

欢迎!请查看关于页面以获取更多关于此功能的信息。

0 投票
algo.generic

clojure.algo.generic.math-functions/abs 在以下内容上不起作用:
clojure.lang.Ratio
clojure.lang.BigInt
java.math.BigDecimal
java.math.BigInteger
我为这些类定义了defmethods,还为数组java.lang.Number定义了一个,以保留其他数值类的前一个功能。

clojure.algo.generic.math-functions/round 在以下内容上不起作用:
clojure.lang.Ratio
clojure.lang.BigInt
java.math.BigDecimal
java.math.BigInteger
各种java整数类(为什么round不应该在整数上工作?)
我为这些定义了defmethods,将java.Math.round委派给double和float,在各个整数类上作为恒等操作,将BigDecimal委派给java.math.BigDecimal#round,将Ratio转换为double或BigDecimal并对其进行四舍五入。

6 答案

0 投票

由:seancorfield 发布的评论

我已经提醒Cort,他需要为补丁文件获取一个签署的CA。

0 投票

由:seancorfield 发布的评论

看起来该补丁与Clojure 1.2不兼容:[http://build.clojure.org/job/algo.generic-test-matrix/137/](http://build.clojure.org/job/algo.generic-test-matrix/137/)

现在有几个Contrib项目正在放弃对1.2的支持,所以如果您不想修改代码,这是一个合理的选择。

0 投票

评论者:spellman

看起来 BigInt 在 Clojure 1.3 中被引入: https://github.com/clojure/clojure/commits/master/src/jvm/clojure/lang/BigInt.java

大家认为好的方法是什么?

0 投票

评论者:spellman

当我取消评论 BigInt 相关的内容时,我在 Clojure 1.2 下通过了测试。

我试了

    *  conditionally making defmethods for BigInt based on the Clojure minor version
    *  putting the defmethods for BigInt inside of a try

无论哪种情况,我都会收到 ClassNotFoundException。

大家会如何做这个?

0 投票

评论者:spellman

新补丁(基于 master,而不是基于第一个补丁)。我在 Clojure 1.2 - 1.7 下看到测试通过了。
测试失败对于 1.1 - 错误信息显示 clojure.core/spit 未定义。

我通过使用 java.lang.Class/forName 检查 BigInt 是否存在来有条件地创建 BigInt 的 defmethod。abs 的 defmethod 使用了 eval;round 不需要它。

我不知道这是否符合惯例,并欢迎改进 :)
我尝试了 java.lang.Class/forName 和 .getMethod 的组合,但无法让它工作。

希望这有所帮助!

0 投票
参考: https://clojure.atlassian.net/browse/ALGOG-12(由 spellman 报告)
...