为什么我有时会听到“词汇变量”一词?

时间:2008-12-19 17:42:02

标签: language-agnostic computer-science terminology lexical-scope

我曾经多次看到“词汇变量”一词,主​​要是在闭包的情况下。 Paul Graham在他关于Lisp的书中使用了这个术语,指的是使用let表达式定义的变量。

我理解词法作用域是静态作用域的另一个名称。词法变量只是在程序单元的引用环境中可见的变量吗?

我希望在这个假期使用这个词给我的朋友和家人留下深刻印象,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

词法变量是一个只能在其词法范围内引用(通过名称)的变量。换句话说,变量的范围由程序的文本定义,而不是程序执行的动态。变量和绑定到它的值可能具有超出词法范围的范围(生命),例如,如果它是在闭包中捕获的。

请参阅scope and extent的说明。

答案 1 :(得分:0)

在程序单元的引用环境中可以看到词法变量,但并非所有在程序单元的引用环境中可见的变量都必然是词法变量。

基本上,词法变量是特定到它所定义的范围的变量。在像Perl这样的语言中,你基本上有两个名称空间相互掩盖:底层的动态包命名空间和重叠的词法命名空间。所以$ foo可以指代其中任何一个,这完全取决于它是否被词汇量声明。