Vector 字符串向量报告错误";str在编译时没有已知的常量大小;

Vector 字符串向量报告错误";str在编译时没有已知的常量大小;,vector,rust,Vector,Rust,在Rust中打印多维向量的内容时,似乎无法使用向量的类型Vec fn print_multidimensional_array(multi: &Vec<Vec<str>>) { for y in 0..multi.len() { for x in 0..multi[y].len() { print!("{} ", multi[y][x]); } println!(""); }

在Rust中打印多维向量的内容时,似乎无法使用向量的类型
Vec

fn print_multidimensional_array(multi: &Vec<Vec<str>>) {
    for y in 0..multi.len() {
        for x in 0..multi[y].len() {
            print!("{} ", multi[y][x]);
        }
        println!("");
    }
}
fn打印多维数组(多维:&Vec){
对于0..multi.len()中的y{
对于0中的x..multi[y].len(){
打印!(“{}”,多[y][x]);
}
println!(“”);
}
}
通过这段代码,我得到了输出:

error[E0277]:不满足特征绑定'str:std::marker::Sized'
-->src/main.rs:1:1
|
1 |/fn打印多维数组(多维:&Vec){
2 | |表示0..multi.len()中的y{
3 | |对于0中的x..multi[y].len(){
4 | | print!(“{}”,多[y][x]);
... |
7 | |     }
8 | | }
|| ^`str`在编译时没有已知的常量大小
|
=help:trait`std::marker::Sized`未为`str实现`
=注:由'std::vec::vec'所需`
我可以使用什么类型的向量来工作?

使用
Vec

fn打印多维数组(多维:&[Vec]){
在多维空间中为y{
对于v in y{
打印!(“{}”,v);
}
println!();
}
}
fn main(){
设v=vec![vec![“a”,“b”],vec![“c”,“d”];
打印多维数组(&v);
}
另见:


因为我喜欢让事情过于一般化

fn print_multidimensional_array<I>(multi: I)
where
    I: IntoIterator,
    I::Item: IntoIterator,
    <I::Item as IntoIterator>::Item: AsRef<str>,
{
    for y in multi {
        for v in y {
            print!("{} ", v.as_ref());
        }
        println!();
    }
}

fn main() {
    let v1 = vec![vec!["a", "b"], vec!["c", "d"]];
    let v2 = vec![["a", "b"], ["c", "d"]];
    let v3 = [vec!["a", "b"], vec!["c", "d"]];
    let v4 = [["a", "b"], ["c", "d"]];

    print_multidimensional_array(&v1);
    print_multidimensional_array(&v2);
    print_multidimensional_array(&v3);
    print_multidimensional_array(&v4);
}
fn打印多维数组(multi:I)
哪里
I:迭代器,
I::Item:into迭代器,
::项目:AsRef,
{
在多维空间中为y{
对于v in y{
打印!(“{}”,v.as_ref());
}
println!();
}
}
fn main(){
设v1=vec![vec![“a”,“b”],vec![“c”,“d”];
设v2=vec![[“a”,“b”,“c”,“d”];
设v3=[vec![“a”,“b”],vec![“c”,“d”];
设v4=[“a”,“b”],[“c”,“d”];
打印多维数组(&v1);
打印多维数组(&v2);
打印多维数组(&v3);
打印多维数组(&v4);
}

你是通过什么过程得出Vec类型的?请阅读,而不是通过猜测和检查来学习生锈。@Shepmaster我也有类似的问题。请你指出TRPL中的章节参考,因为我已经阅读了所有内容,不记得看到任何有用的内容。这不是投诉,但我我想补充一点,即TRPL绝对不是最容易阅读的文档。在我看来,它的许多示例比它们需要的要复杂得多,作为一名学习者,我发现这是一个相当大的挑战,尽管我从汇编程序到Haskell有50年的编程经验。但我希望有一天能够帮助to改进它。谢谢,这完全有效。我想我不太理解向量类型,所以这很有帮助。
fn print_multidimensional_array<I>(multi: I)
where
    I: IntoIterator,
    I::Item: IntoIterator,
    <I::Item as IntoIterator>::Item: AsRef<str>,
{
    for y in multi {
        for v in y {
            print!("{} ", v.as_ref());
        }
        println!();
    }
}

fn main() {
    let v1 = vec![vec!["a", "b"], vec!["c", "d"]];
    let v2 = vec![["a", "b"], ["c", "d"]];
    let v3 = [vec!["a", "b"], vec!["c", "d"]];
    let v4 = [["a", "b"], ["c", "d"]];

    print_multidimensional_array(&v1);
    print_multidimensional_array(&v2);
    print_multidimensional_array(&v3);
    print_multidimensional_array(&v4);
}