Generics 即使提供了类型注释,也需要类型注释
我想这样做:Generics 即使提供了类型注释,也需要类型注释,generics,rust,traits,type-inference,Generics,Rust,Traits,Type Inference,我想这样做: trait Trait { type Type; fn function<T>(val1: &T, ty: T::Type) where T: Trait {} } struct Struct; impl Trait for Struct { type Type = u32; } fn main() { let val = Struct; Trait::function(&val, 5
trait Trait {
type Type;
fn function<T>(val1: &T, ty: T::Type)
where T: Trait
{}
}
struct Struct;
impl Trait for Struct {
type Type = u32;
}
fn main() {
let val = Struct;
Trait::function(&val, 5u32);
}
trait{
类型;
fn函数(val1:&T,ty:T::Type)
式中T:特质
{}
}
struct-struct;
结构的impl特征{
类型=u32;
}
fn main(){
设val=Struct;
特征:功能(&val,5u32);
}
我得到了一个错误:error[E0284]:需要类型注释:无法解析`::type==\u`
(c.f)
但是,即使我添加类型注释(Trait::function::(&val,5u32)
),我也有同样的错误
关于这个错误的原因有什么线索吗?这个特征没有提到
self
或self
,但似乎你希望它能以某种方式推断出你想要的例子
假设您有另一个Trait
的实现:
struct Struct2;
impl Trait for Struct2 {
type Type = u32;
}
然后,即使您将一个Struct
引用作为第一个参数传递,这对于两种实现都是有意义的。这没关系:
let val = Struct;
<Struct as Trait>::function(&val, 5u32);
let val = Struct;
<Struct2 as Trait>::function(&val, 5u32);
现在,它将正确地推断实例,而不需要额外的类型注释。该特征没有提到
self
或self
,但似乎您希望它以某种方式推断出您想要的实例
假设您有另一个Trait
的实现:
struct Struct2;
impl Trait for Struct2 {
type Type = u32;
}
然后,即使您将一个Struct
引用作为第一个参数传递,这对于两种实现都是有意义的。这没关系:
let val = Struct;
<Struct as Trait>::function(&val, 5u32);
let val = Struct;
<Struct2 as Trait>::function(&val, 5u32);
现在,它将正确地推断实例,而不需要额外的类型注释。您实际上是说
函数
是泛型的吗?好像你想让T
成为Self
@mcarton哦,真的,谢谢你!仍然在学习生锈,仍然有一些困难去做我想做的事。假设我来自C++,这是一种完全不同的思维方式:DDO实际上是指<代码>函数<代码>是通用的吗?好像你想让T
成为Self
@mcarton哦,真的,谢谢你!仍然在学习生锈,仍然有一些困难去做我想做的事。假设我来自C++,这是一个完全不同的思维方式:谢谢你,就像McCon的回答一样,我仍然在学习生锈,还有一些麻烦做我想做的事情。假设我来自C++,这是一种完全不同的思考方式,谢谢你,就像回答迈克顿一样,我仍然在学习生锈,还有一些麻烦做我想做的事情。假设我来自C++,这是一种完全不同的思维方式。