首页 > 解决方案 > 在 Rust 中,为什么 '[T]' 和 'str' 切片类型不是语法错误?

问题描述

据我了解,&[T]类型是一个“胖”指针(内存地址和大小),而不是切片本身[T],是被引用的实际切片。但是为什么他们没有[T]在下面的上下文中犯语法错误呢?

let y: [i32; 6] = [1, 2, 3, 4, 5, 6];

// let z: [i32] = y[..]; // error: the size for values of type `[i32]` cannot be known at compilation time

let z: &[i32] = &y[..]; // OK

// let v: str = "Hello World"; // the size for values of type `str` cannot be known at compilation time

从错误:[i32] cannot be known at compilation,这只是一个错误,让我,用户,理解为什么这种语法是不可能的,还是因为我没有正确使用这种语法并且它在某些情况下是有效的?

编辑:修正错字

标签: arraysstringrustslice

解决方案


因为在某些情况下可以使用像str,[T]和等未调整大小的类型。dyn MyTrait

目前最常见的是泛型。例如,您可以使用Box<[T]>or Box<str>Arc<[T]>或任何带有?Sized边界的泛型。

还有一些正在开发中的功能使用这种未调整大小的类型:


推荐阅读