闭包 Closure
闭包访问上下文变量
可以捕获外部变量, 变量有三种方法被捕获:
- 只读引用 (read only)
- 可变引用 (mutable, modified)
- 值 (consumed), 如果该值实现了
Copy
trait, 那就复制一份; 如果未实现, 就将该值move
到 closure中.
当然, 也可以显式地加一个 move
标记, 将一个变量移到closure内.
自加1:
#![allow(unused)] fn main() { let accum = |s: i32| -> i32 { s + 1 }; }
返回一个常数1:
#![allow(unused)] fn main() { let one = || 1; }
也可以获取被捕获变量的所有权:
#![allow(unused)] fn main() { struct Point { x: i32, y: i32, } let square = move |point: Point| -> i32 { point.x + point.y }; }
Rust中的闭包性能跟一般的函数一样, 而且要比函数指针还要快.
作为输出参数
一个高阶函数也可以返回一个函数, 但需要加入 impl
前缀.