我有一个二维的Strings数组,我想把它作为参数传递给一个函数。我已经成功地用i32的二维数组做了这件事,但对于Strings,我没有运气。
下面是一个数组的例子。
let my_string_array_2d = [
["Two", "Arrays", "Of"],
["Three", "Strings", "Each"]
];
这是我用在一个二维i32数组上的函数。
fn print2DIntArray<Matrix: AsRef<[Row]>, Row: AsRef<[i32]>>(x: Matrix) {
for row in x.as_ref() {
for cell in row.as_ref() {
print!("{} ", cell);
}
println!("");
}
}
我试着把它替换成 i32
与 String
, str
和 &str
运气不好。我不是一个Rust开发者,所以可能是我遗漏了一些简单的东西。
我知道我可以用固定的维度来做,但我试图找到一个通用的解决方案。
先谢谢你的帮助。
你的方向是对的--内部的项目是字符串切片,因此 &str
是正确的类型。然而你需要添加一个终身注解。
fn print_2d_int_array<'a, Matrix: AsRef<[Row]>, Row: AsRef<[&'a str]>>(x: Matrix)
在这种情况下,你可以把它变得更加通用:如果目标是能够打印矩阵,你只需要把单元格限制为 Display
:
use std::fmt::Display;
fn print_2d_int_array<Matrix: AsRef<[Row]>, Row: AsRef<[P]>, P: Display>(x: Matrix)