闭包 (计算机科学)
在计算机科学中,闭包(),又稱词法闭包()或函數閉包(),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的自由变量会在捕捉时被…
共 13 篇文章
在计算机科学中,闭包(),又稱词法闭包()或函數閉包(),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的自由变量会在捕捉时被…
在電腦程式設計中,作用域(scope,或譯作有效範圍)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言可能有不同的作用域和名字解析。而同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影響變量的绑定方式,根據語言使用靜態作用域還是動態作用域变量的取值可能会有不同的結果。 包含标识符的宣告或定義; 包含語句和/或運算式,定義或部分關於可執行的演算法; 巢狀嵌套或被巢…
在计算机编程语言中,标识符是用來命名編程语言中实体的词法标记(也称为符号)。标识符可以表示的实体类型包括变量、資料類型、标签、子程序和模块。 範例 C语言/C++/Python/Go/Lua/Delphi 把標識符分为三类:关键字,预定义標識符,用户自定义標識符 。 由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。 不能把关键字、预定义標識符、标准库函数名等作为用户標識符 长度是…
立即调用函数表达式(英文:,缩写:*'),是一种利用JavaScript函数生成新作用域的编程方法。 立即调用函数表达式可以令其函数中声明的变量绕过JavaScript的变量置顶声明规则,还可以避免新的变量被解释成全域变量或函数名占用全域变量名的情况。与此同时它能在禁止访问函数内声明变量的情况下允许外部对函数的调用。有时,这种编程方法也被叫做“自执行(匿名)函数”,但“立即调用函数表达式”是语义上最准确的术语。 用法 立即调用函数表达式…
程式設計裡的綁定時間是指軟體裡的兩個数据實體或是兩個程式碼實體何時建立關聯(綁定)。綁定時間可能是在程式開始執行前,也可能是在開始執行之後。早綁定(early binding)也稱為靜態綁定(static bindind),是指在程式執行前就有的綁定,在運行時無法修改。(late binding)也稱為動態綁定(dynamic binding),是在運行時才進行的綁定。綁定時間可以適用於任何一種綁定方式,包括名字、記憶體(例如透過mal…
在程序設計中,指定敘述()-{zh-cn:,;zh-tw:,又譯指定指述,}-會將一個特定的值設定到某個特定的儲存位址去,這個位置被標記成一個特定的變數名稱。換句話說,這個敘述會複製一個值到某個特定變數中。在多數的指令式程式語言中,這種敘述是其中最基礎的結構。 指定敘述的通用表示方法通常是 x = expr(這種表示法最早源自1949年–1951年时的,因為1957年首版的Fortran與C語言而廣為人知),另一種形式則為 x := e…
在程式設計語言中,名字绑定是把实体(数据或/且代码)关联到标识符。标识符绑定到实体被称为引用该对象。机器语言没有内建的标识符表示方法,但程序设计语言实现了名字与对象的绑定。绑定最初是与作用域相关,因为作用域确定了哪个名字绑定到哪个对象——在程序代码中的哪个位置与哪条执行路径。 绑定时机 静态绑定(Static binding)或称早绑定(early binding):名字绑定发生在程序开始运行之前。 动态绑定(Dynamic bindi…
在计算机科学中,求值策略()是确定编程语言中表达式的求值的一组(通常确定性的)规则。重点典型的位于函数或算子上——求值策略定义何时和以何种次序求值给函数的实际参数,什么时候把它们代换入函数,和代换以何种形式发生。经常使用用来研究函数的形式系统λ演算来建模求值策略,这里它们通常叫做归约策略。求值策略分为两大基本类,严格的和非严格的,基于如何处理给函数的实际参数。一个语言可以组合多种求值策略;例如C++组合了传值调用和传引用调用。多数语言对…
在计算机科学中,部分调用(英文:partial application)是一种函数调用手段,其指将一个多元函数的一部分参数先确定下来,将这个函数和这些参数保存在一个内部数据结构中,并对外呈现一个要求更少的参数的函数。 假设存在函数 f (d, n) = [... 返回 boolean 值表示n是否能被d整除... ]。为了编程方便,需要另一个函数 g (n) = [... 返回 boolean 值表示n是否能被5整除... ]。可见,g…
在计算机科学中,值()是一无法进一步求值的表达式。例如,表达式“1 + 2”不是一个值,因为它可以被化简为表达式“3”。表达式“3”不能够继续化简,因此它是一个值。表达式既有类型(type)属性,又有值分类(value categories)属性。两种属性彼此独立。也就是说,对每一种类型的表达式,都有各种值分类。 大多数编程语言支持几种常见的值。 賦值:左值和右值 一些语言使用左值()和右值()的概念。左值具有确定的、可以被获得的内存地…
在程式語言理論中,惰性求值(),又譯為惰性计算、懒惰求值,也稱為傳需求調用(call-by-need),是计算机编程中的一个概念,目的是要最小化计算机要做的工作。惰性计算的最重要的好处是它可以在空间复杂度上得到极大的优化,从而可以轻易构造一个无限大的数据类型。 惰性求值的相反是及早求值,这是一个大多数编程语言,如C语言,所使用的缺省计算方式。 由于翻译问题,该词在不同语境下有两个相关而又有区别的含意,可以表示为“延迟求值”和“最小化求值…
短路求值(Short-circuit evaluation; minimal evaluation; McCarthy evaluation; 又称最小化求值),是一种逻辑运算符的求值策略。只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值。例如,当AND的第一个运算数的值为false时,其结果必定为false;当OR的第一个运算数为true时,最后结果必定为true,在这种情况下,就不需要知道第二个运算数的具体值…
在计算机编程中,声明是一种指定标识符属性的语言结构。 声明最常用于子程序、变量、常量和类,但也可用于其他实体,例如枚举。 。 参考文献