这个问题 https://stackoverflow.com/q/7852351/346587要求创建一个 Clojure 宏来生成多个函数。我们找到了一种方法来做到这一点,但仍被“这是一个好主意吗?”的问题所困扰。
我的第一反应是并不真地,有两个原因
- 然后,您将拥有代码中未定义的函数,这可能会使您的代码的理解变得相当复杂! (想象一下,有人对您的某个函数有问题,查看源代码却找不到它)。
- 最好在函数或宏中分解出代码的共性。让你的计算机编写一堆非常相似的函数是一个糟糕的方法。
你怎么认为? Lisp 中的生成函数什么时候有意义?它应该是“即时”的还是您更愿意将其保存在某个文件中?
多年来,对代码复杂性的抱怨一直伴随着宏。每个抽象都隐藏了复杂性,无论是宏、函数还是其他什么。
函数因式分解的价值在于重用,因为函数比宏更具可重用性。不仅在能够使用“apply”的情况下,而且在共享代码的字面情况下也是如此。共享函数只是指向函数实现的指针。共享和重用的宏会产生多个函数或代码或其他内容的副本,虽然存在抽象,但代码在系统内根本不共享。
现在,您可以创建一个非常聪明的宏,在扩展时检查函数定义,如果没有找到它,那么它可以动态创建该函数,或者做一些其他聪明的事情。
但即使将这些功能分解出来,它们表面上仍然对用户隐藏,因为这是宏背后的基本前提。将这些辅助函数放入某个隐藏包中并不会使消费者更加可见,除非他们知道查看源代码(假设他们甚至拥有源代码)。
理想情况下,开发人员对这些功能不感兴趣,因为它们“内部没有用户可维修的部件”。如果确实如此,那么宏首先就不足以支持这些函数或提供文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)