提问人:Humble Penguin 提问时间:7/6/2023 最后编辑:Humble Penguin 更新时间:7/6/2023 访问量:82
为什么每当我们在 rust 中创建切片时都需要一个参考符号
Why do we need a reference symbol whenever we create a slice in rust
问:
我对生锈切片的概念有点迷茫。我知道 [T] 是 T 类型元素的连续块,大小未知,我们需要一个指向该数据的指针才能访问它。我不明白的是,如果我们运行以下代码:
let slice: [u8] = arr[1..3];
编译器是否尝试从“arr”访问第一个和第二个元素并将其存储在堆栈中,但它无法做到这一点,因为它不知道大小,因此我们被迫使用如下指针从“arr”引用第一个和第二个元素:
let slice: [u8] = &arr[1..3];
其次,当文档说这句话时,我不明白这意味着什么slices are a view onto a contiguous block of memory
(切片类型)如何查看连续的内存块?(对切片的引用)不是对连续内存块的视图吗?str
&str
我来自C++背景,所以看到字符串和切片如何在生锈中工作有点奇怪
答:
1赞
Chayim Friedman
7/6/2023
#1
其次,当文档说“切片是连续内存块的视图”时,我不明白这意味着什么
你是对的。这里的文档非常混乱。它谈论的是 slice 的引用,因为 slice 本身不是视图,正如我们可以通过 的存在来证明的那样。但是,虽然技术上准确的名称是“切片引用”(或“切片引用”、“切片引用”),但文档在许多地方使用术语“切片”来描述它。Box<[T]>
&[T]
有一个开放的 GitHub 问题可以修复此处和其他地方的术语:#101353。
评论
0赞
isaactfa
7/6/2023
引用分别将 、 和 称为“共享切片”、“可变切片”和“盒装切片”,尽管正如您提到的,这些名称没有出现在我所知道的任何官方文档中。&[T]
&mut [T]
Box<[T]>
下一个:[T], 和 [T] 之间的区别
评论
str
不是一片,是。 不是切片类型,是。因为它们是连续内存块的视图。第一个操作不起作用,因为 的语义不是“给我一个数组的副本”(它只用前面的 定义,然后意味着“给我一个数组的视图”)。&str
[u8,n]
&[u8]
arr[1..3]
&
str
[u8]
&str
&[u8]