gpt4 book ai didi

generics - 即使提供也需要类型注释

转载 作者:行者123 更新时间:2023-11-29 08:26:12 25 4
gpt4 key购买 nike

我想做这样的事情:

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);
}

我收到错误:error[E0284]: type annotations required: cannot resolve `<_ as Trait>::Type == _`(参见 rust playground)

但即使我添加类型注释 ( Trait::function::<Struct>(&val, 5u32) ),我也有同样的错误。

关于这个错误的原因有什么线索吗?

最佳答案

特征没有提到 selfSelf,但您似乎希望它以某种方式推断出您想要的实例。

假设您有另一个 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);

如果您打算让传递给 function 的类型来确定实例,那么参数的类型应该是 Self 而不是 T:

trait Trait {
type Type;

fn function(&self, ty: Self::Type) {}
}

现在,它无需额外的类型注释即可正确推断实例。

关于generics - 即使提供也需要类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com