Jasper Ji

博观而约取,厚积而薄发。

匿名函数和闭包

2020-07-26 23:29

匿名函数和闭包似乎成了现代语言必备的,因为自己接触的语言也多,所以特意做了下目前自己接触的这些语言不同。

package main

import "fmt"

func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {
	pos, neg := adder(), adder()
	for i := 0; i < 10; i++ {
		fmt.Println(
			pos(i),
			neg(-2*i),
		)
	}
}

这是Go语言的原始版本,例子来源于tour.golang.org,后面会用其他的语言来写相同的例子。

JavaScript的版本

function adder() {
    let sum = 0
    return function (x) {
        sum += x
        return sum
    }
}

let pos = adder(), neg = adder()

for (let i = 0; i < 10; i++) {
    console.log(pos(i) + " " + neg(-2 * i))
}

Swift 版本

import Foundation

func adder()->(Int)->Int {
    var sum=0
    return {(x: Int)->Int in
        sum += x;
        return sum
    }
}

var pos = adder(), neg=adder();

for i in (0...9) {
    print("\(pos(i))" + " " + "\(neg(-2*i))")
}

Comments