Rust 特性和仿制药

问题描述 投票:0回答:1

我刚刚学习 Rust,如果这是一个新手问题,很抱歉......

我应该为结构实现以下特征(带有泛型),但该结构没有泛型类型,所以我收到 E0282 错误...

trait MyTrait<T> {
    fn function(&self) -> Option<T>;
}

struct MyStruct {}
impl<T> MyTrait<T> for MyStruct {
    fn function(&self) -> Option<T>{
        None
    }
}
fn main() {
    println!("Ciao!");
    let my_struct = MyStruct{};

    //let _ = my_struct.function(); // doesn't work, error[E0282]: type annotations needed
    //let _: Option<_> = my_struct.function(); // doesn't work, error[E0282]: type annotations needed
    //let _: Option<_> = <MyStruct as MyTrait<_>>::function(&my_struct);// doesn't work, error[E0282]: type annotations needed

}

知道如何解决吗?

我的结构的特征实现不是强制性的,而是推荐的,所以如果我找不到解决方案,我也想跳过它:(

提前感谢您的帮助

generics rust
1个回答
0
投票

在特征的实现中需要类型注释,而不是在调用函数的地方。 如果没有类型信息,非泛型 MyStruct 就无法知道在实现 MyTrait 时要使用哪种泛型类型。 在特征的实现中提供泛型参数的类型将修复这些错误。 我在本示例中选择了 i32,但您应该使用适合您需要的任何类型。

trait MyTrait<T> {
    fn function(&self) -> Option<T>;
}

struct MyStruct {}
impl MyTrait<i32> for MyStruct {
    fn function(&self) -> Option<i32>{
        None
    }
}

fn main() {
    println!("Ciao!");
    let my_struct = MyStruct{};

    let _ = my_struct.function();
}
© www.soinside.com 2019 - 2024. All rights reserved.