我正在努力尝试使用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);
}
我现在想创建一个矢量
let mut vecvec = Vec<Vec<T>>::new();
vecvec.push(number_list);
vecvec.push(char_list);
不幸的是,它不起作用。我希望你有建议。
提前致谢。
最佳答案
首先,“它不起作用”从来没有帮助。它显然“不起作用”,否则您不会寻求帮助。
其次,提供您实际使用的代码(在操场上)比猜测“不工作”的代码应该去哪里要容易得多。
第三,
let mut vecvec = Vec<Vec<T>>::new();
T
需要在某个地方定义,并且必须是有意义的。vecvec.push(number_list); vecvec.push(char_list);
Vec<T>
表示 vec 的所有元素必须具有相同的类型。在这里你有一个 Vec<i32>
和 Vec<char>
.它们不是同一种类型,它们不能调和到同一种类型,所以它们不能放在同一个向量中:Rust 没有无处不在的类型删除或“根类型”à la Java,你可以'不要只是说你有“一个向量的向量”,然后在运行时填充空白。这意味着您需要某种间接来“隐藏”分歧,或者是一个枚举,其中包含您想要的每种类型的 vec 的变体:
enum Wrapper {
Numbers(Vec<i32>),
Chars(Vec<char>)
}
或者一个特征,您可以通过它使用特征对象。
关于vector - Rust 泛型向量<Vector<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989833/