Clojure 2024状态调查中分享您的想法!

欢迎!请访问关于页面以获取更多关于如何操作的信息。

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报告)
...