Rust 通用向量<Vector<T>>

Dus*_*vic 1 vector rust

我正在努力学习 Rust,但我陷入了通用类型的困境。您肯定知道第 10.1 章(通用数据类型)中的示例。我想创建一个包含 i32 向量和 char 向量的向量。但不知何故我无法让它工作。

fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);
}
Run Code Online (Sandbox Code Playgroud)

我现在想创建一个向量

let mut vecvec = Vec<Vec<T>>::new();
vecvec.push(number_list);
vecvec.push(char_list);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用。我希望你有建议。提前致谢。

Mas*_*inn 5

首先,“它不起作用”从来没有帮助。这显然“不起作用”,否则你就不会寻求帮助。

\n

其次,提供您实际使用的代码(在操场上)比猜测“不起作用”的代码应该放在哪里要容易得多。

\n

第三,

\n
\n
let mut vecvec = Vec<Vec<T>>::new();\n
Run Code Online (Sandbox Code Playgroud)\n
\n

T需要在某个地方定义,并且需要是有意义的。

\n
\n
vecvec.push(number_list);\nvecvec.push(char_list);\n
Run Code Online (Sandbox Code Playgroud)\n
\n

Vec<T>意味着 vec 的所有元素必须具有相同的类型。这里有 aVec<i32>和 a Vec<char>。它们不是同一类型,并且不能调和为同一类型,因此不能将它们放入同一向量中:Rust 没有普遍存在的类型擦除或“根类型”\xc3\xa0 la Java,你不能只是说你有“向量的向量”并保留它并在运行时填充空白。

\n

这意味着您需要某种间接来“隐藏”分歧,或者是一个带有您想要的每种 vec 类型的变体的枚举:

\n
let mut vecvec = Vec<Vec<T>>::new();\n
Run Code Online (Sandbox Code Playgroud)\n

或者一个特质,通过它你可以使用一个特质对象

\n