我正在阅读Common Lisp Hyperspec,并且正在努力理解Special声明背后的概念。
即,什么是特殊变量以及为什么我们需要它们?我收集到了,通过使用特殊声明,我们可以在编辑器的眼中改变变量属于哪个范围,但细节没有我。
有人可以解释一下,也许会举一些例子吗?
答案 0 :(得分:3)
特殊变量是动态绑定的。这意味着:
(defvar x 10)
(defun test (v)
(+ v x))
(let ((x 20))
(test x))
; ==> 40
请注意,范围的词法规则不适用。而不是它表现得像第一个Lisp。如果全局变量不是特殊的,那么结果将是30
。您可以通过意外声明变量特殊来引入难以发现的错误。为避免这种情况,我们使用*earmuffs*
。