Rust 数组的切片是否遵循与[T]不同的规则?

Rust 数组的切片是否遵循与[T]不同的规则?,rust,Rust,我明白了,但是当我们引用数组时,返回的切片是 和[i32;33;] i、 e.根据VSCode,配备锈蚀分析仪。然而,它不应该是这样的类型吗 和[i32] 我很困惑,也不清楚如何读取&[i32;uu](显然是一个片)和&[i32;N](一个数组),这两种类型的定义似乎很模糊,非常相似。&[i32;]是数组的借用,而&[i32]是片,意味着动态大小的数组或数组的一部分 &[i32;quo;表示借用的数组具有静态已知的大小,这意味着该大小是通过给定初始值设定项的项目计数静态推断的(必须为2,但rus

我明白了,但是当我们引用数组时,返回的切片是

和[i32;33;]

i、 e.根据VSCode,配备锈蚀分析仪。然而,它不应该是这样的类型吗

和[i32]


我很困惑,也不清楚如何读取&[i32;uu](显然是一个片)和&[i32;N](一个数组),这两种类型的定义似乎很模糊,非常相似。

&[i32;]
是数组的借用,而
&[i32]
是片,意味着动态大小的数组或数组的一部分

&[i32;quo;
表示借用的数组具有静态已知的大小
,这意味着该大小是通过给定初始值设定项的项目计数静态推断的(必须为2,但rust analyzer未详细显示)

&[i32]
意味着它是一个切片,在编译时没有已知大小,在运行时动态调整大小


&[i32;quo;
是一个细指针,这意味着
&[i32;quo;
的实际内存布局只是指向数组起始位置的原始
usize
指针


&[i32]
是一个胖指针,这意味着
&[i32]
的实际内存布局由2个
usize
组成。一个是指向切片起始位置的原始指针,另一个是切片的长度。

这是否回答了您的问题@AlphaModer显然不是,根据rust analyzer,切片是&[T;uu],当它根据您的链接/文档应该是&[T]时,当您引用数组时,它实际上是引用
[T;N]
。这种混乱可能是因为,
&[T;N]
可以在必要时自动强制到
&[T]
上。这不是我从Tim(Rust in Action的作者)那里了解到的,“[T]符号不是通用的,但符号(&)是重要的。使用&str创建字符串切片,数组切片为&[T;N]''。这整个概念非常令人困惑,特别是如果有隐含的强迫正在进行,正如@cerberus@RohitSharma
[T]
是绝对通用的,因为它是有效的动态大小类型。您可以使用借来的片
&[T]
,以及盒装片盒、Rc和任何其他可以接收DST的地方,而
&
、以及
&mut
*const
*mut
都是胖指针,可以指向任何DST,例如[T],另外的
使用
作为长度(片数)或者虚拟表(trait objects)。作为一个旁白@Alsein-我可以问你在哪里读到“&[i32;u]表示借用的数组有一个静态已知的大小,这意味着大小是静态推断的”,这正是我要查找的信息(来自haskell land,我认为uu是一个可以忽略的东西,没有不同的含义)但是我读过的有限的一些书完全忽略了它。如果你能建议的话?它不是读的,而是推断的。推理的
\uu
在rust stable中不是有效的语法,因为目前rust只稳定了const泛型的一个基本用法。它是rust analyzer的表示形式。rust analyzer使用
进行推理因为在类型泛型和生存期泛型上提供了用于推断的
let arr:[i32;_] = [1,2];
let r_arr:&[i32;_] = &arr;