0

我正在阅读 Common Lisp Hyperspec,并且正在努力理解特殊声明背后的概念。

即,什么是特殊变量,我们为什么要它们?我收集到我们可以通过使用特殊声明以某种方式更改变量在编译器眼中属于哪个范围,但细节让我难以理解。

有人可以解释一下并举一些例子吗?

4

1 回答 1

3

特殊变量是动态绑定的。这意味着:

(defvar x 10)

(defun test (v) 
  (+ v x)) 

(let ((x 20))
  (test x)) 
; ==> 40

请注意,范围的词汇规则不适用。而不是它的行为就像第一个 Lisp。如果全局变量不是特殊的,结果将是30. 您可以通过意外声明一个特殊的变量来引入难以发现的错误。为了避免这种情况,我们使用*earmuffs*.

于 2018-01-09T18:26:41.717 回答