Вопрос синтаксиса Clojure re: # ^ - PullRequest
11 голосов
/ 11 июля 2011

в игре 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 ]

11 голосов
/ 11 июля 2011

#^ - это старый синтаксис макроса чтения метаданных. Синтаксис изменился на ^ в версии 1.2. См. http://clojure.org/reader.. В вашем примере #^Graphics представляет подсказку типа , которая используется для повышения производительности.

8 голосов
/ 11 июля 2011

#^ - это «подсказка типа» - он сообщает Clojure, каким классом будет аргумент.В последних версиях clojure вы можете просто сказать ^Graphics вместо #^Graphics.См. Clojure Java Interop - Тип подсказки для получения дополнительной информации.Цитата с этого сайта:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...