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