Clojure:编译前/后函数的时间插入

时间:2012-05-29 02:57:37

标签: clojure

这是Clojure: pre post functions

的后续内容

目标

对于每个Clojure函数,我想要执行 pre post 函数:

  • 在评估函数之前和
  • 函数返回后
  • 现在,我想在我的* .clj文件中执行所有函数。

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

问题:

我如何开始这个?我应该阅读Clojure Compiler源代码的哪一部分?我应该注意哪些关于Clojure编译器内部的文档/教程?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您真的想要破解编译器,那么进行此更改的最简单的地方可能只是在core.clj中攻击defn