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,并在各种整数类中充当恒等函数,委托给 java.math.BigDecimal#round 处理 BigDecimal,并将 Ratio 转换为 double 或 BigDecimal 并进行舍入。

6 个答案

0 投票

评论由:seancorfield

我已提醒 Cort,他需要获取 patch 使用的已签名 CA 文件。

0 投票

评论由:seancorfield

看起来 patch 与 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 提出)
...