我正在Rust中构建一个简单的命令行todo应用程序.如果我没有实现复制特性,我会得到以下错误:"移动是因为'todo'的类型为'todo::todo',而该类型没有实现'copy'特性.".当我try 为Todo struct 实现复制特性时,我收到以下错误:"字段文本:字符串未实现复制特性".如何修复此错误?我的代码如下:

pub type todo_type = Vec<Todo>;

#[derive(Copy)]
pub struct Todo {
    id: usize,
    text: String,
    completed: bool,
}

impl Todo {
    pub fn new(text: String, id: usize) -> Todo {
        Todo {
            text,
            id,
            completed: false,
        }
    }
}

pub struct Todos {
    todos: todo_type,
}

impl Todos {
    pub fn new(todos: todo_type) -> Todos {
        Todos { todos }
    }

    pub fn get_all_todos(self) -> todo_type {
        self.todos
    }

    pub fn get_single_todo(self, todo_index: usize) -> Todo {
        unimplemented!()
    }

    pub fn add_todo(self, text: String) -> Todo {
        let id: usize = 1;

        if self.todos.len() == 0 {
            let id = 1;
        } else {
            let last_todo = match self.todos.len() {
                0 => None,
                n => Some(&self.todos[n - 1]),
            };
            let id = last_todo.unwrap().id;
        }

        let todo = Todo::new(text, id);
        self.todos.push(todo);

        todo
    }

    pub fn remove_todo(self, todo_index: usize) -> bool {
        self.todos.remove(todo_index);

        true
    }
}

推荐答案

这里你需要克隆特征而不是复制特征.Copy特征表明变量可以按原样逐位复制,并且这种类型的变量不构成移动语义的基础.

复制特性的实现存在一些限制.因此,只有当 struct 的所有组件都没有实现Drop特性时, struct 才能实现复制特性.因为String实现了Drop特性,所以您的 struct 无法实现副本.

如果你想复制你的 struct ,那么你需要克隆特征.

Rust相关问答推荐

Tauri tauri—apps/plugin—store + zustand

将此字符串转换为由空格字符分隔的空格

如果A == B,则将Rc A下推到Rc B

使用pyo3::Types::PyIterator的无限内存使用量

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

为什么这是&q;,而让&q;循环是无限循环?

如何导入crate-type=[";cdylib;]库?

如何模拟/创建ReqData以测试Actix Web请求处理程序?

带参考文献的 rust 元组解构

Rust编译器似乎被结果类型与anyhow混淆

Rust ECDH 不会产生与 NodeJS/Javascript 和 C 实现相同的共享密钥

Rust并发读写引起的死锁问题

在1.5n次比较中找到整数向量中的最大和次大整数

缺失serde的字段无法设置为默认值

Rust typestate 模式:实现多个状态?

decltype、dyn、impl traits,重构时如何声明函数的返回类型

pyO3 和 Panics

SDL2 没有在终端键上触发?

Rust 中函数的类型同义词