2024 Clojure 研究调查! 中分享您的想法。

欢迎!请查看关于 页面以获取有关如何工作的更多信息。

+1
Clojure

所以,我写有如下代码

(defn- nanos->ms [elapsed-time]
  (double (/ elapsed-time 1000000)))

即使在 (set! *warn-on-reflection* true) 的情况下,它也可以很好地编译。

但是,当我使用 tools.namespace.repl/refresh 时,我会收到反射警告

Reflection warning: file:....metrics.clj:6:3 - call to static method doubleCast on clojure.lang.RT cannot be resolved

我的假设是,我触发了 double 的内联版本,并且它没有类型提示。

这 correct 是否,以及如果有,我该如何移除这个反射警告?

(defn double
  "Coerce to double"
  {:inline (fn  [x] `(. clojure.lang.RT (doubleCast ~x)))
   :added "1.0"}
  [^Number x] (clojure.lang.RT/doubleCast x))

2 个回答

0
(defn- nanos->ms [elapsed-time]
  (/ elapsed-time 1000000.0))
虽然这解决了当前的问题,但它并没有解释我观察到的现象:)
0

你能设置一个我可以复制的环境吗?

我会尝试一下,看看我能找到什么。
...