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在以下类型的java整数类上也无法工作
clojure.lang.Ratio
clojure.lang.BigInt
java.math.BigDecimal
java.math.BigInteger
(为什么round不适用于整数?)
我为这些类型定义了defmethods,将java.Math.round委托给double和float,作为各种整数类上的恒等操作,委托给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 的 defmethods。对于 abs defmethod,我使用了 eval;round 则不需要。

我不知道这是否符合惯例,我很乐意看到改进:)
我尝试了 java.lang.Class/forName 和 .getMethod 的组合,但无法使其工作。

希望这有所帮助!

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