匿名函数和闭包似乎成了现代语言必备的,因为自己接触的语言也多,所以特意做了下目前自己接触的这些语言不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 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的版本
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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))") }
|