Вызов long-array
является встраиваемой компилятором Clojure в вызове метода Java clojure.lang.Numbers/long_array
, который имеет тип возвращаемого значения от long[]
. Таким образом, компилятор уже может вывести тип a
, и тип-подсказка не дает вам никакой пользы.
Сравните это:
(time
(dorun 1000000
(repeatedly #(let [a (or (long-array (range 10))
(int-array (range 10)))]
(aget a 7)))))
Здесь, компилятор не может определить тип a
, так как он не может предсказать, какую ветвь or
вернется, так что вы должны увидеть хит показательных выступлений по сравнению к вашему примеру кода.
Тип намека относится к ситуации взаимодействия, где компилятор не может иначе вывести тип. Если установка '* warn-on-reflection *' на true не приведет к появлению предупреждения на данном фрагменте кода, подсказка вообще не поможет. –