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

关于补丁:比较器的第一次遍历(检查arity)可能会消失:只有具有相同arity的方法才会进行比较。这听起来对吗?

0

由:bronsa

是的,对我来说听起来是对的

0

由:gshayban

使用更简洁的比较器的补丁

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