我正在努力学习 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)
不幸的是,它不起作用。我希望你有建议。提前致谢。
首先,“它不起作用”从来没有帮助。这显然“不起作用”,否则你就不会寻求帮助。
\n其次,提供您实际使用的代码(在操场上)比猜测“不起作用”的代码应该放在哪里要容易得多。
\n第三,
\n\n\nRun Code Online (Sandbox Code Playgroud)\nlet mut vecvec = Vec<Vec<T>>::new();\n
T需要在某个地方定义,并且需要是有意义的。
\n\nRun Code Online (Sandbox Code Playgroud)\nvecvec.push(number_list);\nvecvec.push(char_list);\n
Vec<T>意味着 vec 的所有元素必须具有相同的类型。这里有 aVec<i32>和 a Vec<char>。它们不是同一类型,并且不能调和为同一类型,因此不能将它们放入同一向量中:Rust 没有普遍存在的类型擦除或“根类型”\xc3\xa0 la Java,你不能只是说你有“向量的向量”并保留它并在运行时填充空白。
这意味着您需要某种间接来“隐藏”分歧,或者是一个带有您想要的每种 vec 类型的变体的枚举:
\nlet mut vecvec = Vec<Vec<T>>::new();\nRun Code Online (Sandbox Code Playgroud)\n或者一个特质,通过它你可以使用一个特质对象。
\n| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |