Clojure语法问题重新:#^

时间:2011-07-11 03:36:24

标签: clojure

在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)))

我无法在任何地方找到文档#^意味着在这种情况下,任何帮助都会受到赞赏。

2 个答案:

答案 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名称(定义时)和表达式