Lisp/Clojure:编写函数生成宏是个好主意吗?

Pau*_*aul 6 lisp macros metaprogramming clojure

这个问题要求创建一个Clojure宏来生成几个函数.我们找到了一种方法来做到这一点,但却坚持"这是一个好主意吗?"的问题.

我最初的反应并不是真的,原因有两个

  1. 然后,您的代码中没有定义函数,这可能会使您对代码的理解变得复杂!(想象一下,有人对你的某个功能有问题,并查看源代码,但却无法在任何地方找到它).
  2. 最好在函数或宏中分解代码的通用性.让你的计算机编写一堆非常相似的函数是一种糟糕的方法.

你怎么看?什么时候在Lisp中生成函数有意义?它应该"在飞行中"还是你想把它放在某个地方?

Dav*_*ton 3

TL;DR:这要看情况。

是否可以将共性或子集抽象为一个或多个函数,仅通过宏定义更动态的位?如果可能,最好尽可能限制宏部分的范围。

函数/宏的本质是什么?如果它们是记录良好的系统方面的一部分,那么它们来自哪里并不重要。

它们是否不太被理解,是否需要经常检查才能理解或验证行为?如果是这样,那么将它们保留为实际函数可能更有意义。如果不是,并且或多或少是“库存”系统方面,请采取更干净的方式。

函数/宏是由每个人维护,还是由更专注于底层系统实现的人维护?如果它们大部分被消耗,那么它们如何/何地/何时实施就不那么重要了。