如何扩展`Classname / staticField`宏语法

时间:2014-05-01 12:24:11

标签: macros clojure static interop expand

the Clojure docs开始,这是访问Java类的静态字段的方法:

Classname/staticField

Math/PI
-> 3.141592653589793

这就是扩张:

  

扩展如下:

   Classname/staticField ==> (. Classname staticField)

我无法使用macroexpand *:

进行展开
> (macroexpand 'Math/E)
Math/E

我可以用什么来展开Classname/staticField

这是Clojure v1.6.0。


*虽然这确实有效:

> (macroexpand '(Math/E))
(. Math E)

1 个答案:

答案 0 :(得分:2)

在这方面文档有点不准确。宏扩展仅适用于列表表单,而不适用于裸符号,因此仅在宏扩展时处理列出的前三个特殊表单(对象和类上的实例方法,类上的静态方法)。在宏扩展后,Classname/staticField语法被解析为静态字段访问,当符号被解析为vars,类或let-bound名称时,如http://clojure.org/evaluation中所述。