如何在 Vec<T> 中 return 从 x 到 y 的元素?

How to return elements from x to y in a Vec<T>?

我有一个 Vec 的结构,我想得到从位置 x 到 y 的结构:

fn main() {
    #[derive(Debug)]
    struct A {
        name: String,
    }
    
    let x = A { name: "X".to_string() };
    let y = A { name: "Y".to_string() };
    let z = A { name: "Z".to_string() };
    
    let v = vec!(x,y,z);
    
    println!("{:?}", v[0..1]);
}

这是 Rust Playground link for it

我遇到错误:

error[E0277]: the size for values of type `[A]` cannot be known at compilation time
   --> src/main.rs:13:5
    |
13  |     println!("{:?}", v[0..1]);
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time

如何确保在编译时知道大小?我找不到任何明显的答案,因此我认为我缺少一些基本的东西。

改变

println!("{:?}", v[0..1]);

println!("{:?}", &v[0..1]);

索引一个 Vec 和一个 Range returns 一个 slice 的大小,但是当你在一个变量上使用 [] 时,编译器会自动取消引用返回值(它只是语法糖),在本例中它使切片未调整大小,因此您必须在其前面放置一个引用以使其再次调整大小。

另请参阅:

  • Rust doesn't have a size known at compile-time