gpt4 book ai didi

clojure.core : . 运算符、defmacro 和 setMacro

转载 作者:行者123 更新时间:2023-12-04 23:07:53 24 4
gpt4 key购买 nike

在查看 defmacro 之后的 clojure.core 文件时定义你来到下面的代码:

(. (var defmacro) (setMacro))

这是什么意思?

最佳答案

.的含义正如 Joost 和 Jeremy 的回答所解释的那样。如果您想知道这个特定方法调用所完成的细节:

这基本上插入了一个名为 :macro 的键。值为 true进入名称为 clojure.core/defmacro 的 Var 的元数据映射中.这样做的效果是,从此时开始,如果编译器遇到符号 defmacro在它解析为 var #'clojure.core/defmacro 的上下文中( #'foo(var foo) 的简写)——通常无处不在,尽管你可以例如用 let 隐藏这个 Var -绑定(bind)局部变量——它会知道它应该在宏名称的情况下适本地对待它。

(也就是说,或者 (1) 如果符号 #'clojure.core/defmacro 出现在运算符位置,即紧靠左括号的右侧,则使用绑定(bind)到 defmacro 的函数扩展宏调用,或者抛出异常提示在非运算符(operator)位置提到了宏名称。)

顺便说一句,Clojure 编译器通常会在 Vars 上使用这种元数据映射,例如决定各种对象的类型(参见 :tag 元数据)或是否内联函数调用(IIRC、:inline:inline-arities)。

关于clojure.core : . 运算符、defmacro 和 setMacro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com