评论由:jafingerhut
我在 Ubuntu 12.04.2 上的这些 Java 6 JVM 复现了您看到的行为
java version "1.6.0_27"
OpenJDK 运行环境(IcedTea6 1.12.5)(6b27-1.12.5-0ubuntu0.12.04.1)
OpenJDK 64位服务器 VM(构建 20.0-b12,混合模式)
java version "1.6.0_45"
Java(TM) SE 运行环境(构建 1.6.0_45-b06)
Java HotSpot(TM) 64位服务器 VM(构建 20.45-b01,混合模式)
然而,我试了两个Java 7 JVMs,它给出了以下行为,看起来更接近你所期望的。我不知道Java 6和Java 7之间导致这种行为差异的确切区别是什么,但这是一些证据表明这可能与Java 6与Java 7有关。
用户=> (set! warn-on-reflection true)
真
用户=> (defn f (链接: a b) (Math/abs (- a b)))
反射警告,NO_SOURCE_PATH:1:15 - 无法解析对 abs 的调用。
'user/f
用户=> (f 1000000000000 2000000000000)
1000000000000
用户=> (class (f 1000000000000 2000000000000))
java.lang.Long
以上行为在Clojure 1.5.1和这些JVMs上观察到
Ubuntu 12.04.2加上这个JVM
java版本 "1.7.0_21"
Java(TM) SE运行时环境(构建1.7.0_21-b11)
Java HotSpot(TM) 64位服务器VM(构建23.21-b01,混合模式)
Mac OS X 10.8.3加上这个JVM
java版本 "1.7.0_15"
Java(TM) SE运行时环境(构建1.7.0_15-b03)
Java HotSpot(TM) 64位服务器VM(构建23.7-b01,混合模式)