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))
}
}
你也应该考虑使用更适合你的情况,并且有一个你所做的事情。
看起来我把它复杂化了一点,谢谢你的帮助!看起来我把它复杂化了一些,谢谢你的帮助!