原始函数和 recur 变量无法干净地通过 (try) 传递;它们被装箱为 Object。这会导致使用原始类型的函数或循环出现反射警告。
`
user=> (set! warn-on-reflection true)
true
user=> (fn [] (loop [t 0] (recur t)))
<user$eval676$fn677 user$eval676$fn677@3d80023a>
user=> (fn [] (loop [t 0] (recur (try t))))
NO_SOURCE_FILE:1 recur 参数对于原始局部变量: t 不匹配原始类型,有: Object,需要: long
自动装箱循环参数: t
<user$eval680$fn681 user$eval680$fn681@5419323a>
user=> (fn [^long x] (recur (try x)))
NO_SOURCE_FILE:1 recur 参数对于原始局部变量: x 不匹配原始类型,有: Object,需要: long
编译器异常 java.lang.IllegalArgumentException: recur 参数对于原始局部变量: x 不匹配原始类型,有: Object,需要: long,正在编译:(NO_SOURCE_PATH:1:1)
`