【发布时间】:2020-01-08 04:49:21
【问题描述】:
我有一个函数,我指定了一个类型参数T on,我假设它是一个结构。然后我将 T 的迭代器收集到 Vec 中:
pub fn get_matches<T>(
&self,
) -> Vec< T>
{
...
some_iter.
.map(|(k, _v)| T{key:(**k).to_string(), hits: 0})
.collect()
}
我收到this error:
96 | .map(|(k, _v)| T{key:(**k).to_string(), hits: 0})
| ^ not a struct, variant or union type
我尝试将返回类型作为类型参数,但我不知道如何获取Vec 的元素类型并对其进行实例化。我只想生成特定形状的元素(即带有key: string 和hits: usize)并返回调用者期望的容器。
【问题讨论】:
-
您接受任何类型的
T。您如何确定T将具有以下字段(并且只有这些字段):key和hits? -
这就是我要指定的内容。或者,我很高兴拥有 -> T,并执行
T::ElemType{key: , hits :}之类的操作,但我也不知道如何指定它。 (我希望那时我必须对 T::ElemType 施加约束)。
标签: rust