给定一个二维向量,其中包含类型的数据:
let v = vec![
vec![1, 1, 1],
vec![0, 1, 0],
vec![0, 1, 0],
];
如何将它传递给函数并最终打印其详情?我尝试了以下代码:
fn printVector(vector: &[[i32]]) {
println!("Length{}", vector.len())
}
T
切片的函数,其中 T
也可以被引用为切片:fn print_vector<T>(value: &[T])
where
T: AsRef<[i32]>,
{
for slice in value {
println!("{:?}", slice.as_ref())
}
}
如果想接受任何类型而不仅仅是i32
,可以进行泛化处理:
fn print_vector<T, D>(value: &[T])
where
T: AsRef<[D]>,
D: Debug,
{
for slice in value {
println!("{:?}", slice.as_ref())
}
}
由于您将向函数传递向量,因此以下代码应该有效:
fn print_vector(vector: Vec<Vec<i32>>) {
println!("Length{}", vector.len())
}
Vec
作为参数而不是引用的答案。 - Shepmaster&[Vec<i32>]
,而不是一个切片的切片:fn print_vector(vector: &[Vec<i32>]) {
println!("Length {}", vector.len())
}
fn main() {
let v = vec![vec![1, 1, 1], vec![0, 1, 0], vec![0, 1, 0]];
print_vector(&v);
}
fn printVector(vector: &Vec<Vec<i32>>) {
println!("Length{}", vector.len())
}
let v = vec![
vec![1, 1, 1],
vec![0, 1, 0],
vec![0, 1, 0],
];
printVector(&v);
&Vec<Vec<i32>>
和 &[Vec<i32>]
没有区别;也许你想改为这样:fn print_vector(vector: &[Vec<i32>]) {
for i in vector {
for j in i {
println!("{}", j)
}
}
}
let v = vec![
vec![1, 1, 1],
vec![0, 1, 0],
vec![0, 1, 0],
];
print_vector(&v);
snake_case
;类型使用UpperCamelCase
;静态变量和常量使用SCREAMING_SNAKE_CASE
。请使用print_vector
。 - Shepmasterv
传递给函数?作为值?作为引用?你需要函数处理Vec
还是只需要一个 slice 就足够了?参见 *通过引用和 Box 将值传递给函数有什么区别?*。 - Tim Diekmann