如何修复 String 字段未实现“Copy”? [复制]

2024-03-15

我正在用 Rust 构建一个简单的命令行待办事项应用程序。如果我不实现复制特征,我会收到此错误:“发生移动是因为‘todo’具有类型‘todo::Todo’,它没有实现‘复制’特征”。当我尝试为 Todo 结构实现 Copy 特征时,收到以下错误:“字段文本:字符串未实现 Copy 特征”。我该如何修复这个错误?我的代码如下:

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 特征表明变量可以按原样逐位复制,并且这种类型的变量不会移动语义。

Copy 特征的实现存在一些限制。仅当结构体的任何组件均未实现 Drop 特征时,结构体才能实现 Copy 特征。由于 String 实现了 Drop 特征,因此您的结构无法实现 Copy 特征。

如果您想要复制结构,那么您需要克隆特征。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复 String 字段未实现“Copy”? [复制] 的相关文章

随机推荐