Jasper Ji

开口不在舌头上

0%

匿名函数和闭包

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

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))")
}