什么是Rust中的矢量切片?

时间:2014-10-14 11:22:54

标签: rust

根据rust doc,字符串切片为:

  

这个字符串是静态分配的,这意味着它保存在我们编译的程序中,并且在整个运行期间都存在。

矢量切片怎么样?这些字节码是硬编码的值吗?

Rust doc没有正确解释什么是矢量切片:

  

与& str类似,切片是对另一个数组的引用。我们可以使用as_slice()方法从向量中获取切片:

let vec = vec![1i, 2i, 3i];
let slice = vec.as_slice();

1 个答案:

答案 0 :(得分:9)

实际上......它不是始终静态分配。请注意具体措辞:

let string = "Hello there.";
  

字符串是静态分配的,这意味着它已保存在我们编译的程序中,并且在整个运行期间都存在(empahsis mine)。

在字符串文字的情况下,字符串是静态分配的,字符串切片引用它。但是,还有其他字符串切片的情况,它们引用动态分配的字符串。


通常, slice 是数组中连续的元素序列(数组所在的任何位置)。因此,在Rust:

  • 字符串切片是UTF-8编码数组中的一个字节切片
  • 矢量切片是类型为T s
  • 的数组中的元素切片(类型为T

如果数组具有静态生命周期(即,在程序的整个持续时间内存在),则使用static关键字表示:

  

&'static str是具有这样生命的&str(字符串切片),因此它是Rust中字符串文字的精确类型。

否则,生命周期通常与数组所有者的生命周期有关,例如:

let vec = vec!(1i, 2, 3);   // create a dynamically allocated array of 3 `int`
let slice = vec.as_slice(); // create a slice into this array,
                            // the lifetime of which cannot (obviously)
                            // exceed that of the array.

因此,如果vec的生命周期为'a,那么slice类型为&'a [int]就可以在类型签名中看到:

fn as_slice(&'a self) -> &'a [T]

(来自std::vec::Vec页面)