如何在 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
我有一个 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