我正在学习 Rust,并且正在练习 Traits 和 generic。我编写了以下代码。我不明白为什么它不起作用,我的意思是,我不明白为什么会出错。
struct Student {
name: String,
age: u8,
course: String
}
struct School {
students: VecDeque<Student>
}
trait Database<T> {
fn get_database(&self) -> &VecDeque<T>;
}
impl<Student> Database<Student> for School {
fn get_database(&self) -> &VecDeque<Student> {
&self.students
}
}
The compiler points out:
--> src\main.rs:25:9
|
23 | impl<Student> Database<Student> for School {
| ------- expected this type parameter
24 | fn get_database(&self) -> &VecDeque<Student> {
| ------------------ expected `&VecDeque<Student>` because of return type
25 | &self.students
| ^^^^^^^^^^^^^^ expected type parameter `Student`, found `Student`
|
= note: expected reference `&VecDeque<Student>` (type parameter `Student`)
found reference `&VecDeque<Student>` (`Student`)
我不明白我做错了什么,因为 self.students 是 VecDeque 类型,并且该类型的引用是从该方法返回的。 谢谢!
这一行是你的问题:
impl<Student> Database<Student> for School {
impl<Student>
本质上与 impl<T>
相同。您正在声明一个名为 Student
的泛型类型参数,它可以是任何类型。 Student
块中 impl
的其余用法引用此泛型类型,而不是 Student
结构。
要解决此问题,只需将
impl<Student>
更改为 impl
:
impl Database<Student> for School {