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