Rust 字符串中的“可增长”和“可变”有什么区别?

Mat*_*ood 4 string mutable rust growable

我正在阅读《Rust 编程语言》。文档将 a 定义String为“可增长”:

UTF-8 编码的可增长字符串。

发现可增长与可变不同,但它们并没有真正解释什么使类型“可增长”。

鉴于这种let mut guess = String::new()

  1. “可生长”是什么意思?
  2. 如何mut改变可增长的字符串?
  3. 是否存在不可增长的字符串类型?

She*_*ter 6

你对这里的措辞想太多了;“可生长”仅意味着它可以生长。String最初分配 3 个字节来包含 的A"abc"可以增长到 6 个字节来包含"abcdef"。内存分配可以变得更大(或更小)。“可增长”这个词没有特定的 Rust 类型系统含义。

更改 a 的容量String是一种特定类型的更改,因此您需要一个可变的变量String才能增长字符串。您还需要一个可变的String变量来进行不涉及更改分配的其他类型的更改。

可变字符串切片 ( &mut str) 是一种不能变长或变短但可以更改的字符串类型。

fn example(name: &mut str) {
    name.make_ascii_uppercase()
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: