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