Pau*_*aul 6 lisp macros metaprogramming clojure
这个问题要求创建一个Clojure宏来生成几个函数.我们找到了一种方法来做到这一点,但却坚持"这是一个好主意吗?"的问题.
我最初的反应并不是真的,原因有两个
你怎么看?什么时候在Lisp中生成函数有意义?它应该"在飞行中"还是你想把它放在某个地方?
TL;DR:这要看情况。
是否可以将共性或子集抽象为一个或多个函数,仅通过宏定义更动态的位?如果可能,最好尽可能限制宏部分的范围。
函数/宏的本质是什么?如果它们是记录良好的系统方面的一部分,那么它们来自哪里并不重要。
它们是否不太被理解,是否需要经常检查才能理解或验证行为?如果是这样,那么将它们保留为实际函数可能更有意义。如果不是,并且或多或少是“库存”系统方面,请采取更干净的方式。
函数/宏是由每个人维护,还是由更专注于底层系统实现的人维护?如果它们大部分被消耗,那么它们如何/何地/何时实施就不那么重要了。