闭包简而言之,是一段有状态的代码。咱试着用闭包来做一个计数器,每次调用,闭包的状态就加1.
Go
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
nextInt := intSeq()
fmt.PrintLn(nextInt())
fmt.PrintLn(nextInt())
fmt.PrintLn(nextInt())
}
1
2
3
Rust
由于编译时我们无法知道闭包的体积,所以用一个Box把它套起来。另外,闭包的具体类型是不可描述的,只能用dyn关键字来通过Trait来描述。
fn main() {
fn int_seq() -> Box<dyn FnMut() -> i32> {
let mut i = 0;
Box::new(move || {
i += 1;
i
})
}
let mut next_int: Box<_> = int_seq();
assert_eq!([1,2,3], [next_int(), next_int(), next_int()]);
有疑问加站长微信联系(非本文作者)