示例:

struct Foo<V> {
    value: V,
}

impl<V> Foo<V> {
    fn insert(&mut self, value: V) -> Option<V> {
        // move occurs because `self.value` has type `V`, which does not implement the `Copy` trait
        let v = self.value;
        self.value = value;

        Some(v)
    }
}

我知道为什么铁 rust 会抱怨这一点,有什么替代方案可以实现这一点吗?

推荐答案

使用std::mem::replace.它从dest指针读取数据,并将src放在它的位置.

struct Foo<V> {
    value: V,
}

impl<V> Foo<V> {
    fn insert(&mut self, value: V) -> Option<V> {
        let v = std::mem::replace(&mut self.value, value);
        Some(v)
    }
}

Rust相关问答推荐

在actix—web中使用Redirect或NamedFile响应

是否可以为`T:Copy`执行`T. clone`的测试

如何找到一个数字在二维数组中的位置(S)?

在泛型 struct 的字段声明中访问关联的Conant

rust 迹-内存管理-POP所有权-链表

在执行其他工作的同时,从共享裁判后面的VEC中删除重复项

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

如何向下转换到MyStruct并访问Arc Mutex MyStruct实现的方法?

如何修复数组中NewType导致的运行时开销

为什么这个变量不需要是可变的?

变量需要parse()中的显式类型

我无法理解Rust范围的定义(Rust Programming Language,第二版克拉布尼克和尼科尔斯)

不能在Rust中使用OpenGL绘制三角形

Rust将String上的迭代器转换为&;[&;str]

在 Rust 中,在第一个空格上分割字符串一次

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

如何递归传递闭包作为参数?

为什么 no_std crate 可以依赖于使用 std 的 crate?

Rustfmt 是否有明确类型的选项?

为什么我可以从读取的可变自引用中移出?