我试图用具有特征边界的泛型类型的字段来实现结构。我希望Group.admin
的值为Printable
。它的确切类型并不重要。
struct Group<T: Printable> {
admin: T,
}
struct Person {
name: String,
}
impl Person {
fn new() -> Person {
Person {
name: String::from("Bob"),
}
}
}
trait Printable {
fn print(&self);
}
impl Printable for Person {
fn print(&self) {
println!("{}", self.name);
}
}
fn group_test<T: Printable>() -> Group<T> {
Group {
admin: Person::new(),
}
}
但编译器不允许这样做:
error[E0308]: mismatched types
--> src/lib.rs:27:16
|
27 | admin: Person::new(),
| ^^^^^^^^^^^^^ expected type parameter, found struct `Person`
|
= note: expected type `T`
found type `Person`
我不确定这里有什么问题。也许我必须以某种方式将Person::new()
的值转换为<T: Printable>
?
答案 0 :(得分:1)
group_test
函数不是通用的,它应该返回Group<T>
,而是返回Group<Person>
。
编译:
fn group_test() -> Group<Person> {
Group {
admin: Person::new(),
}
}
这也可以编译:
fn group_test<T: Printable>(printable: T) -> Group<T> {
Group {
admin: printable,
}
}