请在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的未来本身就是IDeref)。

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

我认为抛出ClassCastException不是最佳选择。IllegalArgumentException似乎更合适,因为该函数涵盖多个接口(包括具有超时的有限变体)。
0
参考: https://clojure.atlassian.net/browse/CLJ-1162(由 alex+import 报告)
...