閉包?
閉包是指可以包含自由(未綁定到特定對(duì)象)變量的代碼塊弃鸦;這些變量不是在這個(gè)代碼塊內(nèi)或者任何全局上下文中定義的洗鸵,而是在定義代碼塊的環(huán)境中定義(局部變量)∑凉浚“閉包” 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中称勋,這些自由變量以及它們引用的對(duì)象沒有被釋放)和為自由變量提供綁定的計(jì)算環(huán)境(作用域)胸哥。在PHP、Scala赡鲜、Scheme空厌、Common Lisp、Smalltalk银酬、Groovy蝇庭、JavaScript、Ruby捡硅、 Python哮内、Go、Lua、objective c北发、swift 以及Java(Java8及以上)等語言中都能找到對(duì)閉包不同程度的支持纹因。
中文名 閉包 外文名 closure 相關(guān)學(xué)科 離散數(shù)學(xué) 用? ? 途 編程邏輯 特? ? 點(diǎn) 未綁定到特定對(duì)象
目錄
1 拓?fù)涓拍?/p>
? 本質(zhì)
? 度量空間中的
? 極限點(diǎn)
? 性質(zhì)
2 舉例說明
3 語法結(jié)構(gòu)
4 環(huán)境表達(dá)
? 代碼
? 特點(diǎn)
? 作用
? 另一個(gè)例子
? 結(jié)果
? 應(yīng)用場(chǎng)景
? 匿名內(nèi)部
? 定義
5 離散數(shù)學(xué)中
6 Lua中
? 包
? 可以這樣做
? 假設(shè)
? 外部局部變量
? 二種意義
拓?fù)涓拍罹庉?/p>
集合A的閉包定義為所有包含A的閉集之交。A的閉包是包含A的最小閉集琳拨。
本質(zhì)
集合 S 是閉集當(dāng)且僅當(dāng) Cl(S)=S(這里的cl即closure瞭恰,閉包)。特別的狱庇,空集的閉包是空集惊畏,X 的閉包是 X。集合的交集的閉包總是集合的閉包的交集的子集(不一定是真子集)密任。有限多個(gè)集合的并集的閉包和這些集合的閉包的并集相等颜启;零個(gè)集合的并集為空集,所以這個(gè)命題包含了前面的空集的閉包的特殊情況浪讳。無限多個(gè)集合的并集的閉包不一定等于這些集合的閉包的并集缰盏,但前者一定是后者的父集。
若 A 為包含 S 的 X 的子空間淹遵,則 S 在 A 中計(jì)算得到的閉包等于 A 和 S 在 X 中計(jì)算得到的閉包(Cl_A(S) = A ∩ Cl_X(S))的交集口猜。特別的,S在 A 中是稠密的透揣,當(dāng)且僅當(dāng) A 是 Cl_X(S) 的子集济炎。
度量空間中的
對(duì)歐幾里德空間的子集 S,x 是 S 的閉包點(diǎn)辐真,若所有以 x 為中心的開球都包含 S 的點(diǎn)(這個(gè)點(diǎn)也可以是 x)冻辩。
這個(gè)定義可以推廣到度量空間 X 的任意子集 S。具體地說拆祈,對(duì)具有度量 d 的度量空間 X,x 是 S 的閉包點(diǎn)倘感,若對(duì)所有 r > 0放坏,存在 y 屬于 S,使得距離 d(x,y) < r(同樣的老玛,可以是 x = y)淤年。另一種說法可以是,x 是 S 的閉包點(diǎn)蜡豹,若距離 d(x,S) := inf{d(x,s) : s 屬于 S} = 0(這里 inf 表示下確界)麸粮。
這個(gè)定義也可以推廣到拓?fù)淇臻g,只需要用鄰域替代“開球”镜廉。設(shè) S 是拓?fù)淇臻g X 的子集弄诲,則 x 是 S 的閉包點(diǎn),若所有 x 鄰域都包含 S 的點(diǎn)。注意齐遵,這個(gè)定義并不要求鄰域是開的寂玲。
極限點(diǎn)
閉包點(diǎn)的定義非常接近極限點(diǎn)的定義。這兩個(gè)定義之間的差別非常微小但很重要——在極限點(diǎn)的定義中梗摇,點(diǎn) x 的鄰域必須包含和 x 不同的集合的點(diǎn)拓哟。
因此,所有極限點(diǎn)都是閉包點(diǎn)伶授,但不是所有的閉包點(diǎn)都是極限點(diǎn)断序。不是極限點(diǎn)的閉包點(diǎn)就是孤點(diǎn)。也就是說糜烹,點(diǎn) x 是孤點(diǎn)违诗,若它是 S 的元素,且存在 x 的鄰域景图,該鄰域中除了 x 沒有其他的點(diǎn)屬于 S较雕。
對(duì)給定的集合 S 和點(diǎn) x,x 是 S 的閉包點(diǎn)挚币,當(dāng)且僅當(dāng) x 屬于 S亮蒋,或 x 是 S 的極限點(diǎn)。
集合的閉包
集合 S 的閉包是所有 S 的閉包點(diǎn)組成的集合妆毕。S 的閉包寫作 cl(S)慎玖,Cl(S) 或 S?。
性質(zhì)
cl(S) 是 S 的閉父集笛粘。
cl(S) 是所有包含 S 的閉集的交集趁怔。
cl(S) 是包含 S 的最小的閉集。
集合 S 是閉集薪前,當(dāng)且僅當(dāng) S = cl(S)润努。
若 S 是 T 的子集,則 cl(S) 是 cl(T) 的子集示括。
若 A 是閉集铺浇,則 A 包含 S 當(dāng)且僅當(dāng) A 包含 cl(S)。
有時(shí)候垛膝,上述第二或第三條性質(zhì)會(huì)被作為拓?fù)溟]包的定義鳍侣。
在第一可數(shù)空間(如度量空間)中,cl(S) 是所有點(diǎn)的收斂數(shù)列的所有極限吼拥。