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