为什么Rust需要在“";impl";关键词?
定义泛型类型的方法需要在为什么Rust需要在“";impl";关键词?,rust,Rust,定义泛型类型的方法需要在impl之后添加泛型类型: struct GenericVal<T>(T,); impl <T> GenericVal<T> {} struct-GenericVal(T,); impl GenericVal{} 我觉得删除似乎可以: struct GenericVal<T>(T,); impl GenericVal<T> {} struct-GenericVal(T,); impl GenericVal{
impl
之后添加泛型类型:
struct GenericVal<T>(T,);
impl <T> GenericVal<T> {}
struct-GenericVal(T,);
impl GenericVal{}
我觉得删除
似乎可以:
struct GenericVal<T>(T,);
impl GenericVal<T> {}
struct-GenericVal(T,);
impl GenericVal{}
有什么特别的考虑吗 Rust允许您编写只适用于某些特定类型参数组合的
impl
块。例如:
struct GenericVal<T>(T);
impl GenericVal<u32> {
fn foo(&self) {
// method foo() is only defined when T = u32
}
}
此声明还允许您拥有一个可以多次使用的单一类型参数,从而强制类型相同
struct GenericVal<T, U>(T, U);
impl<V> GenericVal<V, V> {
fn foo(&self) {
// method foo() is only defined when T = U
}
}
struct GenericVal(T,U);
植入通用值{
fn foo(和self){
//方法foo()仅在T=U时定义
}
}
然而,编译器似乎可以从GenericVal
的类型参数而不是impl
进行推断。你能解释一下为什么必须使用impl
语法吗?我认为这不是绝对必要的,但是if有助于防止歧义。如果有人在该模块的范围内引入了名为V
的类型,该怎么办?在impl
中使用V
是指具体类型V
(如我回答中的第一个示例)还是指隐式泛型参数V
?@yesheng正如Francis所说,impl可以用于实现特定类型,您可以认为签名impl-GenericVal{}与impl一样,impl是一个声明,GenericVal是该声明类型的用法。如果有人想知道同样的事情,请参阅我的文章,我试图用简单的示例解释为什么需要这样做。
struct GenericVal<T, U>(T, U);
impl<V> GenericVal<V, V> {
fn foo(&self) {
// method foo() is only defined when T = U
}
}