我刚刚学习 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
}
知道如何解决吗?
我的结构的特征实现不是强制性的,而是推荐的,所以如果我找不到解决方案,我也想跳过它:(
提前感谢您的帮助
在特征的实现中需要类型注释,而不是在调用函数的地方。 如果没有类型信息,非泛型 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();
}