定义泛型类型的方法需要在impl
之后添加泛型类型:
struct GenericVal<T>(T,);
impl <T> GenericVal<T> {}
我觉得删除<T>
似乎没问题:
struct GenericVal<T>(T,);
impl GenericVal<T> {}
有什么特别的考虑吗?
答案 0 :(得分:14)
Rust允许您编写仅适用于某些特定类型参数组合的impl
块。例如:
struct GenericVal<T>(T);
impl GenericVal<u32> {
fn foo(&self) {
// method foo() is only defined when T = u32
}
}
此处,GenericVal
类型是通用的,但impl
本身不是。
因此,如果您要编写适用于所有impl
类型的GenericVal<T>
块,您必须首先在impl
本身上声明类型参数(否则,T
会尝试查找名为T
的类型。
struct GenericVal<T>(T);
impl<T> GenericVal<T> {
fn foo(&self) {
// method foo() is always present
}
}
此声明还允许您使用可以多次使用的单个类型参数,从而强制类型相同。
struct GenericVal<T, U>(T, U);
impl<V> GenericVal<V, V> {
fn foo(&self) {
// method foo() is only defined when T = U
}
}