我知道一个分片就像一个fatptr。(data_ptr, len)
. 当我把一个数组分片成一个slice时。
let arr = [0; 10];
let slice_arr = &arr[..];
一个数组没有长度字段,就像... Vec<T>
.
我知道 slice_arr.len()
可以得到切片的长度,因为 slice_arr
有一个长度字段。当一个数组被转换为一个分片时,Rust如何知道长度字段?
一个数组 是否 有一个长度的 "参数"。它不是一个字段,它是类型的一部分。
let x: [u8; 2] = [1, 2];
let y: [u8; 3] = x; // Error here
The type of x
是 [u8; 2]
. 元素的数量是 始终 2,元素的类型是 始终 u8
.
因为 [u8; 2]
和 [u8; 3]
是不同的类型,一个是 始终 正好2 u8
的长,另一个是 始终 正好3 u8
的长,任务从 x
变成 y
失败。
当对数组进行某些操作时,编译器对数组有特殊的内置语义。这些内置语义可以利用长度 "参数"(The N
在 [T; N]
). 您可以在类型级别上访问这个值,使用 const
属,但这是一个晚上才有的功能,现在。
使用 .len
方法。
use std::io::stdin;
fn main() {
let arr = [0; 10];
let slice_arr = &arr[..];
println!("first element of the slice: {}", slice_arr[0]);
println!("the slice has {} elements", slice_arr.len());
}
https:/doc.rust-lang.orgstablerust by-exampleprimitivesarray.html。