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

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

0
Clojure
反射不会在不同的 JVM 调用中返回相同的方法顺序(通过 Class::getMethods)。这在将 Clojure 函数(Callable 和 Runnable)提交到执行器时最为明显。


(ns repro)

;;(set! *warn-on-reflection* true)

(defn repro
  []
  (let [exec (java.util.concurrent.ForkJoinPool/commonPool)
        work #(do 1)]
    (deref (.submit ^Object exec work))))  ;; 故意使用反射

(defn -main []
   ;; dereffing a runnable returns nil, a callable can return a value, in this case an integer
  (System/exit (or (repro) 0)))



nondeterministic ➜ while true; do clojure -m repro; echo $?; done
0
0
0
1
0
0
0
1
0
0
0

5 个答案

0

评论者:gshayban

附加了一个排序已看到方法的补丁

0

评论者:gshayban

关于补丁:比较器的第一次通过(检查参数个数)可以消失:只有具有相同参数个数的函数将被比较。对吗?

0

评论者:bronsa

是的,这听起来是对的

0

评论者:gshayban

带有更最少比较函数的补丁

0
参考:[https://clojure.atlassian.net/browse/CLJ-2413](https://clojure.atlassian.net/browse/CLJ-2413) (由 gshayban 报告)
...