golang:函數(shù)閉包

From wiki 閉包
在計(jì)算機(jī)科學(xué)中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。閉包在運(yùn)行時(shí)可以有多個(gè)實(shí)例,不同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生不同的實(shí)例。

從上面的解釋可以看出,其實(shí)閉包就是函數(shù)本身加上引用函數(shù)外的自由變量組成的實(shí)體,而這個(gè)自由變量的生命周期和該函數(shù)一樣。
package main

import "fmt"

// 斐波列契函數(shù)
func Fibonacci() func() int {
    a, b := 0, 1
    return func() int {
       // 引用的外部自由變量 a, b
       a, b = b, a+b
       return b - a
    }
}

func main() {
    f := Fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Printf("% d", f())
    }
}

output: 0 1 1 2 3 5 8 13 21 34
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,200評論 1 10
  • 以下翻譯自Apple官方文檔,結(jié)合自己的理解記錄下來。翻譯基于 swift 3.0.1 原文地址 Closure...
    藝術(shù)農(nóng)閱讀 1,713評論 0 3
  • 1.首先,什么是閉包 先看這么一個(gè)圖: G,F,N 分別代表三個(gè)層次的函數(shù),a,b,c分別是其中的變量。正常情況下...
    公公明閱讀 1,621評論 0 3
  • 閉包是自包含的函數(shù)代碼塊,可以在代碼中被傳遞和使用。Swift 中的閉包與 C 和 Objective-C 中的代...
    窮人家的孩紙閱讀 1,812評論 1 5
  • 轉(zhuǎn)多云了,突然有點(diǎn)想你,哈,好多年沒有這種心境 不知最近的你過得怎么樣,應(yīng)該挺好的 雖然目前的狀況,再沒有交集,偶...
    墨色紙閱讀 244評論 0 0

友情鏈接更多精彩內(nèi)容