閉包

閉包:一個函數和與其相關的引用環境組合而成的實體

package main

import "fmt"

func main() {
    var f = Adder()
    fmt.Print(f(1)," - ")
    fmt.Print(f(20)," - ")
    fmt.Print(f(300))
}

func Adder() func(int) int {
    var x int
    return func(delta int) int {
        fmt.Println()
        fmt.Printf("delta:%d", delta)
        fmt.Println()
        x += delta
        return x
    }
}

輸出:

delta:1
1 -
delta:20
21 -
delta:300
321
Process finished with exit code 0

package main

import (
    "fmt"
    "strings"
)
func makeSuffixFunc(suffix string) func(string) string {
    return func(name string) string {
        if !strings.HasSuffix(name, suffix) {
            return name + suffix
        }
        return name
    }
}
func main() {
    func1 := makeSuffixFunc(".bmp")
    func2 := makeSuffixFunc(".jpg")
    fmt.Println(func1("test"))
    fmt.Println(func2("test"))
}

輸出:
test.bmp
test.jpg

Process finished with exit code 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章