我有一个函数可以将多个函数组合成一个函数:
fn compose<'a, T>(fns: &'a [&dyn Fn(T) -> T]) -> Box<dyn Fn(T) -> T + 'a> {
Box::new(move |mut x| {
for f in fns {
x = f(x);
}
x
})
}
为什么我需要在这里移动fns
?如果我不输入move,我会得到以下错误:
error[E0373]: closure may outlive the current function, but it borrows `fns`, which is owned by the current function
--> src/lib.rs:2:14
|
2 | Box::new(|mut x| {
| ^^^^^^^ may outlive borrowed value `fns`
3 | for f in fns {
| --- `fns` is borrowed here
我不明白为什么我需要把fns移到闭包中,而它只是一个引用。move在这里实际上做了什么?
1条答案
按热度按时间nbewdwxp1#
reference只是一个普通的变量,就像其他变量一样,如果你不使用
move
,那么闭包中的fns
将是对一个reference的引用,而这个reference在函数末尾超出了作用域。