2

这是Clojure 的后续:pre post functions

目标

对于每个 Clojure 函数,我都希望有一个执行的prepost函数:

  • 就在函数被评估之前,并且
  • 在函数返回之后

    现在,我想在我的 *.clj 文件中执行所有这些功能。

    我更愿意(这也是一个学习练习)在 Clojure 编译器级别执行此操作。

问题:

我该如何开始呢?我应该阅读 Clojure 编译器源代码的哪一部分?我应该了解有关 Clojure 编译器内部的哪些文档/教程?

谢谢!

4

1 回答 1

1

首先,这听起来像是一件有点疯狂的事情。几乎可以肯定有更好的方法来实现任何明智的目标(即这是尖叫“ XY 问题”)。但只要你说这只是为了学习练习,那很好:-)

在破解编译器之前,我可以想到一些您可能需要考虑的策略:

  • 创建您自己的defn宏,在创建函数时进行包装。显然,您需要确保使用您自己的 defn 版本而不是内置版本。可能是最简单的解决方案。
  • 在运行时(加载后)遍历您的命名空间,并将所有函数重新定义为同一函数的包装版本。可能会有点混乱,但肯定会增强您对命名空间的理解:-)

如果您真的想破解编译器,进行此更改最简单的地方可能就是破解defncore.clj

于 2012-05-29T03:16:26.390 回答