在Rich Hickeys蚂蚁游戏中,他有以下代码:
(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)))
我无法在任何地方找到文档#^意味着在这种情况下,任何帮助都会受到赞赏。
答案 0 :(得分:11)
#^
是元数据阅读器宏的旧语法。在clojure 1.2中,语法已更改为^
。见http://clojure.org/reader。在您的示例中,#^Graphics
代表type hint,用于出于性能原因。
答案 1 :(得分:8)
#^
是一个“类型提示” - 它告诉Clojure参数将是什么类。在最近的clojure版本中,您只需说^Graphics
而不是#^Graphics
。有关详情,请参阅Clojure Java Interop - Type Hints。来自该网站的引用:
Clojure支持使用类型提示来帮助编译器避免在性能关键的代码区域中反映。通常,在存在已知性能瓶颈之前,应避免使用类型提示。类型提示是放置在编译器使用的符号或表达式上的元数据标记。它们可以放在函数参数,let-bound名称,var名称(定义时)和表达式
上