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++,这是一种完全不同的思维方式。