【问题标题】:Why scripting languages use dynamic scope rule?为什么脚本语言使用动态范围规则?
【发布时间】:2010-11-24 09:13:03
【问题描述】:

有人知道为什么脚本语言使用动态范围规则吗?我在互联网上找不到任何关于这件事的信息。

【问题讨论】:

  • 您的意思是所有脚本语言都这样做,而实际上只有少数语言会这样做,例如 Javascript 和 LISP 等等。
  • @leppie: Javascript 不是动态作用域的,大多数现代 lisp 也不是(普通 lisp 允许您选择使变量动态作用域,但默认是静态作用域 - 方案和 clojure 不要'根本不允许动态范围)。

标签: scripting programming-languages scope


【解决方案1】:

脚本语言通常没有dynamic scoping。 Scheme、Lua、Ruby 和 Python 都是词法范围的。只有少数几种语言仍在使用动态范围,因为它很难通过查看代码来推断代码在做什么。

当您说“动态范围”时,您想描述什么?

【讨论】:

    【解决方案2】:

    部分是因为他们可以。与编译语言相比,脚本语言在访问变量方面已经有了很大的开销。添加动态范围很容易,添加闭包等有趣的功能也很容易。

    【讨论】:

    • 你提到闭包很有趣,因为对于动态范围来说,这些通常是不必要的/毫无意义的。还应该指出的是,大多数脚本语言实现动态作用域(无论多么容易)。
    【解决方案3】:

    这里有一个有用的动态范围概述: 来自http://c2.com/cgi/wiki?DynamicScoping

    这包括以下内容:

    “动态范围是有用的 替代全局范围 变量。一个函数可以说“让 current_numeric_base = 16;打电话给其他人 函数;”和其他函数 将全部以十六进制打印。然后 当他们返回时,以及基础设置 函数返回,基数将返回 不管它是什么。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 2014-06-30
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2011-02-04
      相关资源
      最近更新 更多