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