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

欢迎!请参阅 关于 页面,了解有关如何工作的更多信息。

+2
错误

如果您在repl中只输入"@1",在早期版本中,您会收到Long无法转换为IDeref的错误。在1.5中,错误信息表示它无法转换为java.util.concurrent.Future。这是因为它假定任何不是IDeref的东西自动就是Future。deref方法应生成一个自定义错误,指出您传入的类型既不是IDeref也不是Future。

2 个答案

0

评论由:gfredericks做出

附上了一个实现旧行为的补丁(不能转换为IDeref),在我看来,考虑到对j.u.c.Future的支持似乎相当边缘(因为Clojure的futures本身也是IDeref),这已经足够好。

我做得最奇怪的事情是使用clojure.core/cast无条件抛出ClassCastException。如果这看起来很奇怪,我会做些不同的事情。

我认为抛出ClassCastException不是理想的。IllegalArgumentException感觉更合适,因为该函数涵盖了多个接口(包括具有超时的边界变体)。
0
参考:https://clojure.atlassian.net/browse/CLJ-1162(由 alex+import 报告)
...