Rust 是否可以在&;像&;穆特

Rust 是否可以在&;像&;穆特,rust,Rust,以下代码无法编译,因为MutRef不是Copy。无法将其复制,因为mut i32不可复制。有没有办法给MutRef类似于&'a mut i32 这样做的动机是能够将大量函数参数打包到一个结构中,以便它们可以作为一个组传递,而不需要单独传递 struct MutRefNo 此功能的名称为“隐式重新加载”,当您传递一个&mut引用时会发生这种情况,其中编译器希望&mut引用具有可能不同的生存期。只有当实际类型和预期类型都是&mut引用时,编译器才会隐式重新启动。它不适用于包含&mut引用的对象或结构

以下代码无法编译,因为MutRef不是
Copy
。无法将其复制,因为mut i32不可复制。有没有办法给MutRef类似于
&'a mut i32

这样做的动机是能够将大量函数参数打包到一个结构中,以便它们可以作为一个组传递,而不需要单独传递

struct MutRefNo

此功能的名称为“隐式重新加载”,当您传递一个
&mut
引用时会发生这种情况,其中编译器希望
&mut
引用具有可能不同的生存期。只有当实际类型和预期类型都是
&mut
引用时,编译器才会隐式重新启动。它不适用于包含
&mut
引用的对象或结构。在current Rust中,没有办法生成可以隐式重新编译的自定义类型

但是,您可以实现自己的方法来显式重新箭头:

impl<'a> MutRef<'a> {
    // equivalent to fn reborrow(&mut self) -> MutRef<'_>
    fn reborrow<'b>(&'b mut self) -> MutRef<'b> {
        MutRef {v: self.v}
    }
}

fn wrapper() {
    let mut s: i32 = 9;
    let mut q = MutRef{ v: &mut s };
    wrapper_use(q.reborrow());  // does not move q
    wrapper_use(q);             // moves q
}
impl{
//相当于fn REBROW(&mut self)->MutRef(&b mut self)->MutRef。