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不能在整数上工作?)
我为double和float定义了defmethods以委托java.Math.round,对于各种整数类作为恒等映射,委托给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 defmethod,我使用了eval;round不需要它。

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

希望这能有所帮助!

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