Clojure синтаксис вопрос re: # ^

в игре Rich Hickeys ant у него есть следующий код:

(import 
 '(java.awt Color Graphics Dimension)
 '(java.awt.image BufferedImage)
 '(javax.swing JPanel JFrame))

(defn fill-cell [#^Graphics g x y c]
  (doto g
    (.setColor c)
    (.fillRect (* x scale) (* y scale) scale scale)))

Я не могу найти документацию в любом месте, что означает # ^ в этом контексте, любая помощь была оценена.

Ответ 2

#^ - это "подсказка типа" - он сообщает Clojure, в каком классе будет аргумент. В последних версиях Clojure вы можете просто сказать ^Graphics вместо #^Graphics. Подробнее см. Clojure Java Interop - Type Hints. Цитата с этого сайта:

Clojure поддерживает использование подсказок типа, чтобы помочь компилятору избежать отражения в критически важных областях кода. Как правило, следует избегать использования подсказок типа, пока не появится известное узкое место производительности. Тип подсказок - это теги метаданных, помещенные в символы или выражения, которые потребляются компилятором. Они могут быть размещены на функциональных параметрах, именах с привязкой, имена переменных (если они определены) и выражения