Rust泛型:预期类型参数,已找到(&T)

Rust泛型:预期类型参数,已找到(&T),rust,ownership,Rust,Ownership,我不太会生锈,只是涉猎而已。 我正在尝试实现一个通用队列,没有生产原因,只是熟悉该语言 我有: pub struct Queue<T> { container: Vec<T>, } impl<T> Queue<T> { pub fn new() -> Self { Queue { container: Vec::new(), } } pub fn en

我不太会生锈,只是涉猎而已。 我正在尝试实现一个通用队列,没有生产原因,只是熟悉该语言

我有:

pub struct Queue<T> {
    container: Vec<T>,
}

impl<T> Queue<T> {
    pub fn new() -> Self {
        Queue {
            container: Vec::new(),
        }
    }

    pub fn enqueue(&mut self, item: T) {
        self.container.push(item);
    }

    pub fn next(&mut self) -> Option<T> {
        if self.container.is_empty() {
            return None;
        } else {
            let result = self.container.first();
            self.container.remove(0);
            return result;
        }
    }
}
我得到了以下错误:

错误[E0308]:类型不匹配 ->src/lib.rs:22:20 | 5 | impl队列{ |-此类型参数 ... 16 |发布fn下一个和多个自->选项{ |----由于返回类型,应为'std::option::option' ... 22 |返回结果; |^^^应为类型参数“T”,找到了“&T”` | =注意:应为enum`std::option::option` 找到枚举'std::option::option'` =帮助:必须约束类型参数以匹配其他类型 =注:有关更多信息,请访问https://doc.rust-lang.org/book/ch10-02-traits.htmltraits-as-parameters
据我所知,这里的问题是,首先返回的是对包含向量中某个值的引用,而不是获取该值的副本。然而,我不太知道如何从向量中获取任意项,然后从下一个函数返回该项。

Rust collections通常会返回元素的所有权您可以从中删除。这种情况是:

发布fn删除和修改自身,索引:usize->T 移除并返回向量中位置索引处的元素,将其后面的所有元素向左移动

重点是我的

这意味着您可以执行以下操作:

pub fn next(&mut self) -> Option<T> {
    if self.container.is_empty() {
        None
    } else {
        Some(self.container.remove(0))
    }
}

你也应该考虑使用更适合你的情况,并且有一个确切地做你正在做的事情。

锈集合通常会让你拥有从它们中移除的元素的所有权。 发布fn删除和修改自身,索引:usize->T 移除并返回向量中位置索引处的元素,将其后面的所有元素向左移动

重点是我的

这意味着您可以执行以下操作:

pub fn next(&mut self) -> Option<T> {
    if self.container.is_empty() {
        None
    } else {
        Some(self.container.remove(0))
    }
}

你也应该考虑使用更适合你的情况,并且有一个你所做的事情。

看起来我把它复杂化了一点,谢谢你的帮助!看起来我把它复杂化了一些,谢谢你的帮助!