arrays - 在 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
,这只是一个错误,让我,用户,理解为什么这种语法是不可能的,还是因为我没有正确使用这种语法并且它在某些情况下是有效的?
编辑:修正错字
解决方案
因为在某些情况下可以使用像str
,[T]
和等未调整大小的类型。dyn MyTrait
目前最常见的是泛型。例如,您可以使用Box<[T]>
or Box<str>
、Arc<[T]>
或任何带有?Sized
边界的泛型。
还有一些正在开发中的功能使用这种未调整大小的类型:
- 您可以
struct
使用一个未调整大小的字段定义 a,从而使结构本身未调整大小。不过目前非常无用,因为您实际上无法创建这样的结构。 - RFC-1909实施后,将允许您通过在堆栈上动态分配它们来在堆栈、args 等中使用未调整大小的类型。不过,我不会指望它很快就会发生。
推荐阅读
- ios - Swift 5.3 未在 xcode 12 构建设置中显示
- python - 如何在 pyfiglet python3 中获取所有可用的字体
- android - Android 不会自动完成
- java - 我可以将字符串中的字段值放入 Apache Solr 中的自定义 TokenFilter 中吗?
- javascript - JS如何处理键盘事件
- html - 未找到 CSS 选择器错误。?VScode 中的警告
- android - 如何在 Android 中舍入 RadioButton?
- javascript - 使用 JavaScript、localStorage 和 Php 计算当前用户的超链接点击次数
- javascript - 使用箭头函数引用与内联箭头函数时 javascript 中的混淆行为
- android - 邮递员表单编码文件上传不适用于改造