move对引用变量做什么?



我有一个函数,它将多个函数组合成一个函数:

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将是对引用的引用,该引用将在函数结束时超出作用域。

相关内容

  • 没有找到相关文章

最新更新