这是Clojure 的后续:pre post functions
目标
对于每个 Clojure 函数,我都希望有一个执行的pre和post函数:
- 就在函数被评估之前,并且
在函数返回之后
现在,我想在我的 *.clj 文件中执行所有这些功能。
我更愿意(这也是一个学习练习)在 Clojure 编译器级别执行此操作。
问题:
我该如何开始呢?我应该阅读 Clojure 编译器源代码的哪一部分?我应该了解有关 Clojure 编译器内部的哪些文档/教程?
谢谢!
这是Clojure 的后续:pre post functions
对于每个 Clojure 函数,我都希望有一个执行的pre和post函数:
在函数返回之后
现在,我想在我的 *.clj 文件中执行所有这些功能。
我更愿意(这也是一个学习练习)在 Clojure 编译器级别执行此操作。
我该如何开始呢?我应该阅读 Clojure 编译器源代码的哪一部分?我应该了解有关 Clojure 编译器内部的哪些文档/教程?
谢谢!
首先,这听起来像是一件有点疯狂的事情。几乎可以肯定有更好的方法来实现任何明智的目标(即这是尖叫“ XY 问题”)。但只要你说这只是为了学习练习,那很好:-)
在破解编译器之前,我可以想到一些您可能需要考虑的策略:
defn
宏,在创建函数时进行包装。显然,您需要确保使用您自己的 defn 版本而不是内置版本。可能是最简单的解决方案。如果您真的想破解编译器,进行此更改最简单的地方可能就是破解defn
core.clj