看起来未检查的数学没有将(long)转换为(unchecked-long),但(int)却如此。我相信这是一个错误,如果不是,我也不确定为什么,因为作为一个用户,我期望未检查的数学标志将所有有等价未检查变体的函数转换为那个变体。
(set! *unchecked-math* true)
(decompile (int (nth [1 2 3] 1)))
;; RT.uncheckedIntCast(RT.nth(const__5, RT.uncheckedIntCast(1L)));
(decompile (long (nth [1 2 3] 1)))
;; Numbers.num(RT.longCast(RT.nth(const__5, RT.uncheckedIntCast(1L))));
(set! *unchecked-math* false)
(decompile (int (nth [1 2 3] 1)))
;; RT.intCast(RT.nth(const__5, RT.intCast(1L)));
(decompile (long (nth [1 2 3] 1)))
;; Numbers.num(RT.longCast(RT.nth(const__5, RT.intCast(1L))));
记录日志:https://clojure.atlassian.net/browse/CLJ-2551