clojure:覆盖函数应用程序

clojure: override function application

是否可以覆盖 Clojure 中函数应用程序的行为?

例如,我想创建一个命名空间,其中:

(+ 2 2)

通过如下宏计算常量 5

(defmacro app [& args] 5)

+ 只是一个函数,因此您可以为您的命名空间排除对 clojure.core/+ 的引用,然后在该命名空间中定义您自己的加法函数。

Clojure 不为此命名空间中的函数应用程序概念提供通用挂钩。开发工具所做的是读取所有包含函数的符号的名称空间,然后将它们与进行跟踪的包装函数挂钩。这只会影响发生这种情况时命名空间中存在的函数,因此它不如您要求的那样通用。

有关更多示例,请参阅 clojure.tools.trace and Robert Hooke