closure相比于函数最大的区别是,能够保存环境变量。下面一些例子。
在闭包中引用不可变环境变量:
fn main() {
let i = 1;
let f = |mut index| -> i32 {
index += i;
index
};
assert_eq!(f(1), 2);
}
在闭包中引用可变环境变量:
fn main() {
let mut i = 1;
let mut f = |mut index| -> i32 {
i += 1;
index += i;
index
};
assert_eq!(i, 2);
assert_eq!(f(1), 3);
}
将环境变量转移到闭包中:
fn main() {
let mut i = 1;
let mut f = move |mut index| -> i32 {
i += 1;
index += i;
index
};
assert_eq!(i, 1);
assert_eq!(f(1), 3);
}