为了方便原型设计,我依赖于许多全局变量,这些变量在整个代码中大量使用。但是现在我想让其中一些本地化(但动态)。在本地special
而不是全局声明它们是否有任何重大缺点(例如,效率等)?
特殊变量的不受欢迎的特性包括:
- 缺乏参考透明度
这使得对代码进行功能推理变得更加困难。这意味着您的函数使用语法等效的调用产生不同的结果。
- 引入错误
如果在代码中的某处(例如,在系统函数中)定义了词法变量,则会覆盖它并导致错误。
- 混乱
特殊(动态)装订不受欢迎,会让不熟悉它的读者感到困惑。
- 必要
只需使用词法绑定,甚至是回溯宏即可。
更多信息:
Anaphoric macros 参见 Doug Hoyte 的 Let Over Lambda,或 Paul Graham 的回音宏。
LiSP(Lisp in Small Pieces)有一个关于绑定和动态绑定的部分
Elisp 默认有动态绑定,长时间强制动态绑定
许多早期的Lisp都有动态绑定,但放弃了它。