Clojure语法问题:关于#^符号

11

在Rich Hickey的蚂蚁游戏中,他有以下代码:

(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

#^是元数据读取宏的旧语法。在Clojure 1.2中,语法已更改为^。请参见http://clojure.org/reader。在您的示例中,#^Graphics表示用于性能原因的类型提示


8
#^是一种“类型提示”,它告诉Clojure参数的类别。在最近的Clojure版本中,您可以直接使用^Graphics而不是#^Graphics。有关更多信息,请参见Clojure Java Interop - Type Hints。该网站上的引用如下:
Clojure支持使用类型提示来帮助编译器避免在代码的性能关键区域中进行反射。通常情况下,应避免使用类型提示,直到出现已知的性能瓶颈。类型提示是放置在符号或表达式上的元数据标签,由编译器消耗。它们可以放置在函数参数、let-bound名称、var名称(在定义时)和表达式上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接