2024年Clojure调查问卷!中分享您的想法。

欢迎!请查看关于页面,了解更多有关如何操作的信息。

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


(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 []
   _InitStructure*  ;; 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(由gshayban报告)
...