为什么我会收到错误“预期类型参数,找到整型变量”?

Fel*_* Ha 1 generics rust

我越来越熟悉 Rust 泛型,但我不知道出了什么问题。

use std::collections::BTreeMap;

fn frequency<T: Ord + Clone>(vec: &Vec<T>) -> BTreeMap<T, u32> {
    let mut movie_reviews = BTreeMap::new();
    let mut vec_ = Vec::new();
    vec.push(1);
    movie_reviews
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它需要 type T

use std::collections::BTreeMap;

fn frequency<T: Ord + Clone>(vec: &Vec<T>) -> BTreeMap<T, u32> {
    let mut movie_reviews = BTreeMap::new();
    let mut vec_ = Vec::new();
    vec.push(1);
    movie_reviews
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*all 5

我不知道为什么它需要类型 T

它期望一个类型的值,T因为您正试图将一个值推入Vec<T>.

问题是您提供给编译器的唯一信息T是它是Ord + Clone- 但这些特征都没有说它1是 的值TOnenumcrate 中有一个 trait ,它提供了这个:

extern crate num; // 0.2.0

use num::One;
use std::collections::BTreeMap;

fn frequency<T>(vec: &mut Vec<T>) -> BTreeMap<T, u32> 
where
    T: Ord + Clone + One,
{
    let mut movie_reviews = BTreeMap::new();
    vec.push(T::one());
    movie_reviews
}
Run Code Online (Sandbox Code Playgroud)

正如其他人评论的那样,您的代码还有一两个其他问题,我不会在这里解决这些问题,因为这将解决您所询问的错误。