请在 2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于页面 了解更多有关如何使用本站的信息。

0 投票
Clojure

这应该能与预期相符,例如

{{(Integer. 1N)}}

可能适用于 {{BigInt}}、{{BigInteger}} 和 {{BigDecimal}}。

可以查看的方法是 {{c.l.Reflector.paramArgTypeMatch}},如 Rich 在 irc 中所述。

11 个答案

0 投票

评论由: trptcolin 提出

关于如何影响左移操作的 clojure-dev 列表中的问题: http://groups.google.com/group/clojure-dev/browse_thread/thread/2191cbf0048d8ca6

0 投票

评论由:ataggart 提出

CLJ-445 补丁也修复了这个问题。

0 投票

评论由: trptcolin 提出

这个补丁在关于 BigInt 的位移操作 (bit-shift-left 1N 10000) 处失败。原因是补丁改变了 (BigInt, Long) 的分派,从 (Object, Object) 变为 (long, int)。

显然,这不能应用(除非其他更改使其可行),但我在此将其作为讨论的开始。

0 投票

评论由:ataggart 提出

来自邮件列表的我的评论

如果测试失败,这可能意味着Numbers.shiftLeft(long,int)被选用了,而不是Numbers.shiftLeft(Object,Object)。
由于1N是一个Object(可以超过long的大小),方法选择是错误的,因此补丁是无效的。
鉴于1N是一个可以超出long大小的Object,所用的方法是错误的,因此补丁有缺陷。
简单地修改paramArgTypeMatch的提议是不充分的,因为在编译器中有一种机制决定了选择哪一个方法,而这个机制并不足够智能,不能作出这类决策。


关于“简单修改paramArgTypeMatch”的建议不够充分,因为偏爱一个方法而不偏爱另一个方法的问题存在于编译器中,并且编译器不足以作出这样的决策。

0 投票

评论者:redinger

考虑将此内容移出Release.next - 正向Chas征求意见。

0 投票
_评论者:cemerick_

恐怕我对这一问题涉及的要点没有特别的见解。我曾经遇到原先提到的问题,并在Rich的建议下创建了工单。如果工单中的文本误导了任何人,我深感抱歉...
0 投票

评论者:lvanderhart

关于位操作的争议已不再有意义,因为已经决定位操作仅适用于32位/64位值。

这是一个有效的问题,但Rich建议降低优先级。

0 投票

评论者:alextt

原补丁的修改版本

0 投票

评论者:jafingerhut

亚历克斯,你介意将文件以唯一的文件名附上吗?我知道JIRA允许我们以相同的文件名创建多个附件,也知道我们可以通过上传附件的日期和登录上传附件的人的账户来区分它们,但给他们相同的名称似乎只会引发混淆。

0 投票

评论者:alextt

将更新的补丁重命名为唯一名称

0 投票
参考:https://clojure.atlassian.net/browse/CLJ-666(由cemerick报告)
...