【问题标题】:Using Local Special Variables使用局部特殊变量
【发布时间】:2019-06-23 16:27:47
【问题描述】:

为了原型设计的方便,我依赖了许多在整个代码中大量使用的全局变量。但现在我想让其中一些成为本地的(但动态的)。将它们声明为本地 special 而不是全局是否有任何明显的缺点(例如效率等)?

【问题讨论】:

  • 我预计不会出现效率问题。显然,special 变量的所有不受欢迎的特性都适用。
  • 您能总结一下不受欢迎的功能,以便我进行审查吗?
  • 那么问题是关于在本地声明为特殊的局部变量?

标签: global-variables common-lisp


【解决方案1】:

特殊变量的冷门特征包括:

  • 缺乏参考透明度

这使得对代码进行功能推理变得更加困难。这意味着您的函数使用语法等效的调用会产生不同的结果。

  • 引入错误

如果在代码中的某处定义了词法变量(例如,在系统函数中),您将覆盖它并导致错误。

  • 令人困惑

特殊(动态)绑定不受欢迎,会让不熟悉它的读者感到困惑。

  • 不必要的

只需使用词法绑定,甚至是照应宏。

更多信息:

照应宏参见 Doug Hoyte 的 Let Over Lambda,或 Paul Graham 的照应宏。

LiSP(Lisp in Small Pieces)有一个关于绑定和动态绑定的部分

Elisp默认有动态绑定,长期强制动态绑定

许多早期的 lisp 都有动态绑定,但后来放弃了。

【讨论】:

  • 感谢您提供全面的总结——所有没有将我的全球特色菜翻译成当地特色菜的充分理由。将研究减少对全局变量依赖的其他方法(除了将本地版本作为参数传递)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2013-01-25
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多