Rust 字符串中的 "growable" 和 "mutable" 有什么区别?

What is the difference between "growable" and "mutable" in a Rust string?

我正在阅读 The Rust Programming Language. The docs define a String 作为 "growable":

A UTF-8 encoded, growable string.

,但是 他们并没有真正解释是什么构成了类型 "growable".

鉴于此 let mut guess = String::new(),

  1. "growable" 是什么意思?
  2. mut如何改变可增长的字符串?
  3. 是否有不可增长的字符串类型?

你想多了这里的措辞; "growable"只代表它可以成长。最初分配 3 个字节来包含 "abc"String 可以 增长 到 6 个字节来包含 "abcdef"。内存分配可以变得更大(和更小)。 "growable".

这个词没有特定的 Rust 类型系统含义

改变 String 的容量是一种特殊类型的改变,所以你需要一个可变的 String 来增加字符串。对于不涉及更改分配的其他类型的更改,您还需要一个可变 String

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

fn example(name: &mut str) {
    name.make_ascii_uppercase()
}

另请参阅:

  • What are the differences between Rust's `String` and `str`?