我有一个函数,它将多个函数组合成一个函数:
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在这里到底是做什么的?
引用只是一个普通变量,就像任何其他变量一样。如果不使用move
,则闭包中的fns
将是对引用的引用,该引用将在函数结束时超出作用域。