rust move对作为引用的变量做什么?

nx7onnlm  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(96)

我有一个函数可以将多个函数组合成一个函数:

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在这里实际上做了什么?

nbewdwxp

nbewdwxp1#

reference只是一个普通的变量,就像其他变量一样,如果你不使用move,那么闭包中的fns将是对一个reference的引用,而这个reference在函数末尾超出了作用域。

相关问题