Common Lisp中的“假”全局词法变量

时间:2013-06-20 23:15:14

标签: lisp global-variables common-lisp lexical-scope

Google Common Lisp Style Guide的“全局变量和常量”部分中说明:

“Common Lisp没有全局词法变量,因此命名约定用于确保动态绑定的全局变量从不具有与局部变量重叠的名称。

可以使用不同命名的全局变量和DEFINE-SYMBOL-MACRO伪造全局词法变量。你不应该使用这个技巧,除非你首先发布一个抽象它的库。“

请有人帮我理解最后一句话的含义。

1 个答案:

答案 0 :(得分:7)

最后一句,

  

你不应该使用这个技巧,除非你首先发布一个抽象它的库。

意味着如果你做了一些模拟全局词汇变量的事情,那么该模拟的实现对用户来说应该不明显。例如,您可以使用define-symbol-macro使用某种方案模拟全局词汇,但如果这样做,它应该对用户透明。请参阅Ron Garret的GLOBALS — Global Variables Done Right,了解“将其抽象出来的图书馆。”