来自the Clojure docs ,这是访问 Java 类的静态字段的方法:
Classname/staticField
Math/PI
-> 3.141592653589793
这是扩展:
The expansions are as follows:
Classname/staticField ==> (. Classname staticField)
我无法使用macroexpand
来扩展它*:
> (macroexpand 'Math/E)
Math/E
我用什么来扩展Classname/staticField
?
这是 Clojure v1.6.0。
*虽然这确实有效:
> (macroexpand '(Math/E))
(. Math E)
最佳答案
该文档在这方面有点不准确。宏扩展仅适用于列表形式,不适用于裸符号,因此在宏扩展时仅处理列出的前三种特殊形式(对象和类上的实例方法、类上的静态方法)。当符号解析为 var、类或 let 绑定(bind)名称(如 http://clojure.org/evaluation 中所述)时,Classname/staticField
语法在宏扩展后解析为静态字段访问。 .
关于macros - 如何扩展 `Classname/staticField`宏语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23407616/