Generics 应为类型参数“T”,找到“&;T`
我有一个泛型结构,但我有一个问题Generics 应为类型参数“T”,找到“&;T`,generics,rust,Generics,Rust,我有一个泛型结构,但我有一个问题 #[derive(Debug,Clone,Serialize,Deserialize)] pub struct Item<T> { pub edges: Option<Vec<T>> } impl<T> Item<T> { pub fn to_result(self) -> Option<T>{ match self.ed
#[derive(Debug,Clone,Serialize,Deserialize)]
pub struct Item<T> {
pub edges: Option<Vec<T>>
}
impl<T> Item<T> {
pub fn to_result(self) -> Option<T>{
match self.edges {
Some(edges) =>{
if edges.is_empty() { return None; }
return edges.first();
},
None => None
}
}
}
#[派生(调试、克隆、序列化、反序列化)]
发布结构项{
发布边缘:选项
}
impl项目{
pub fn to_result(self)->选项{
匹配自我边缘{
某些(边)=>{
如果edges.is_empty(){返回None;}
返回边。first();
},
无=>无
}
}
}
我得到这个错误:
expected type parameter `T`, found `&T`
note: expected enum `std::option::Option<T>`
found enum `std::option::Option<&T>`
help: type parameters must be constrained to match other types
note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
应为类型参数'T',找到'&T'`
注意:应为enum`std::option::option`
找到枚举'std::option::option'`
帮助:必须约束类型参数以匹配其他类型
注:有关更多信息,请访问https://doc.rust-lang.org/book/ch10-02-traits.html#traits-作为参数
edges.first()获取一个引用,这会导致错误
请帮助我。您正在使用向量并试图发送对第一个元素的引用
pub fn to_result(self) -> Option<T>{
self.edges?.into_iter().next()
}
您正在使用向量并尝试发送对第一个元素的引用
pub fn to_result(self) -> Option<T>{
self.edges?.into_iter().next()
}
为了使它更加地道,您可以将
self.values?写入到iter().next()
中,而不是在let中写入。是的。它更简洁。让我更新一下。总是忘记?选项的用法。为了使其更为惯用,您可以将self.values?.写入\u iter().next()
而不是if let
。Yes。它更简洁。让我更新一下。总是忘记?选项用法。旁注:您可能应该使用直接Vec
而不是选项
,除非您的程序能够区分None
和空Vec
。旁注:您可能应该使用直接Vec
而不是选项
,除非您的程序能够区分None
和空的Vec
。