作用域

✍ dations ◷ 2024-12-23 14:24:50 #计算机编程

在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言可能有不同的作用域和名字解析。而同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影响变量的绑定方式,根据语言使用静态作用域还是动态作用域变量的取值可能会有不同的结果。

名字空间是一种作用域,使用作用域的封装性质去逻辑上组群起关相的众识别子于单一识别子之下。因此,作用域可以影响这些内容的名字解析。

程序员常会缩进他们的源代码中的作用域,改善可读性。

下列例子显示了C++语言中多种不同的作用域声明:

namespace N{                        // 命名空间作用域,仅是群组织别名   class C   {                     // 类作用域,定义/声明成员变量和函数      void f (bool b)      {                  // 函数作用域,包含可执行语句         if (b)         {               // 条件执行语句的无名作用域           ...         }      }   };}

静态作用域与动态作用域

静态作用域又叫做词法作用域,采用词法作用域的变量叫词法变量。词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。词法作用域里,取变量的值时,会检查函数定义时的文本环境,捕捉函数定义时对该变量的绑定。

大多数现在程序设计语言都是采用静态作用域规则,如C/C++、C#、Python、Java、JavaScript……

相反,采用动态作用域的变量叫做动态变量。只要程序正在执行定义了动态变量的代码段,那么在这段时间内,该变量一直存在;代码段执行结束,该变量便消失。这意味着如果有个函数f,里面调用了函数g,那么在执行g的时候,f里的所有局部变量都会被g访问到。而在静态作用域的情况下,g不能访问f的变量。动态作用域里,取变量的值时,会由内向外逐层检查函数的调用链,并打印第一次遇到的那个绑定的值。显然,最外层的绑定即是全局状态下的那个值。

采用动态作用域的语言有Pascal、Emacs Lisp、Common Lisp(兼有静态作用域)、Perl(兼有静态作用域)。C/C++是静态作用域语言,但在宏中用到的名字,也是动态作用域。

相关

  • 第三次意大利独立战争意大利统一运动(意大利语:Risorgimento,意为“复兴”,故中文文亦有译为“复兴运动”)是19世纪至20世纪初期间,将意大利半岛内各个国家统一为意大利的政治及社会过程。1861年3月17
  • 国际食品法典委员会国际食品法典委员会(英语:Codex Alimentarius Commission,简称CAC,又称Codex),名称源自拉丁文,其中Codex意为“表册、簿籍、案卷、法典等”;Alimentarius意为“卫生者、可供食料者”
  • 摩尔门小道摩尔门之路(英语:Mormon Trail)是指1846年至1868年期间,耶稣基督后期圣徒教会(摩尔门教)信徒自伊利诺伊州诺伍迁徙至犹他州的一条路线,全长约1300英里(2080公里)。由于遭到迫害,当时的
  • 塞浦路斯·诺尔维特塞浦路斯·诺尔维特(波兰语:Cyprian Norwid,,1821年9月24日-1883年5月23日)是一位波兰诗人、剧作家、画家和雕塑家。他出生在华沙附近的马佐夫舍村 。他的母亲祖先是波兰国王约翰
  • 基因共表达网络基因共表达网络是一种无向图,每个节点代表基因,如果二者存在明显的共表达关系,就用一个边连接两个节点。 对不同的样本或者不同的实验条件建立基因表达谱后,可以通过查看不同样
  • 双齿七鳃鳗属双齿七鳃鳗属(学名:),是七鳃鳗目七鳃鳗科的一属。大多数物种在东欧分布。该属有七种:乌克兰可能存在的第八种双齿七鳃鳗在19世纪后期灭绝。
  • 傅学文傅学文(1903年-1992年),女,江苏宜兴人,中国社会活动家、政治人物,南京市力学小学创办者、首任校长,中国国民党革命委员会中央委员会原常务委员,第五、六、七届全国政协委员。丈夫邵力
  • 威廉·弗莱德金威廉·弗里德金(William Friedkin,1935年8月29日-)是一位美国知名电影导演、制片人和剧作家。最著名的作品是其执导的1971年的警匪片《法国贩毒网》和1973年的恐怖片《驱魔人》
  • 本都王国本都王国(古希腊语:Πόντος),又称本都帝国,是公元前3世纪至至公元后1世纪期间一个以安那托利亚地区为中心的希腊化国家。其君主是希腊化的波斯人,自称是阿契美尼德王朝君主大
  • BAAD大田绅一郎(吉他、和声) 小林正道(贝斯) 新井康德(鼓)1996年-1999年 秦秀树(主唱)1992年-1995年 BAAD是日本一支摇滚乐队。作为一支1990年代的Being系摇滚乐队,他们非常稀奇地没有接受