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来使double和float执行java.Math.round并作为各种整数类的恒等操作,将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/

现在一些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,我使用了 eval;对于 round,则不需要。

我不知道这是否符合习惯用法,并欢迎提出改进意见。
我曾尝试过使用 java.lang.Class/forName 和 .getMethod 的组合,但无法使其正常工作。

希望这有助于。

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