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

标签 macros clojure static interop expand

来自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/

相关文章:

c++ - 静力学需要上课吗?

vim:插入行号和一些数学的宏

c++ - 宏与模板结合生成Object

performance - Clojure数字处理性能

clojure:根据值的序列划分序列

创建静态 Mac OS X C 构建

c++ - 通常,使用C++模板会产生比使用宏执行相同代码更大的可执行文件吗?

scala - 在宏注解主体中检测宏注解类型

concurrency - 了解 Clojure 并发示例

html - 是否可以将 google adsense 添加到 Bitbucket 页面