【问题标题】:Why do I sometimes hear the term "lexical variable?"为什么我有时会听到“词法变量”这个词?
【发布时间】:2010-09-27 18:07:59
【问题描述】:

我已经多次看到术语“词法变量”,主要是在闭包的上下文中。 Paul Graham 在他关于 Lisp 的书中使用这个术语来指代使用 let 表达式定义的变量。

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

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

【问题讨论】:

  • +1 表示希望用编程术语给您的家人留下深刻印象。你一定有一个书呆子的家庭。 :)

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


【解决方案1】:

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

查看scope and extent的描述。

【讨论】:

    【解决方案2】:

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

    基本上,词法变量是特定于定义它的范围的变量。在像 Perl 这样的语言中,您实际上有两个相互掩蔽的命名空间:底层动态包命名空间和覆盖的词法命名空间。所以 $foo 可以引用任何一个,这完全取决于它是否在词法上声明。

    【讨论】:

    • 那么可以肯定地说“词法变量”和“局部变量”这两个术语可以互换吗?词汇更精确?
    • 不。 Perl 具有非词法的作用域本地化变量(它们在包命名空间中实现),使用 local() 关键字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2021-11-03
    • 1970-01-01
    • 2019-07-07
    • 2019-11-17
    相关资源
    最近更新 更多