为什么 `str` 封装在 `String` 中而不是 `Box<str>` 中?

Why is `str` encapsulated inside `String` instead of inside a `Box<str>`?

这不会给我带来任何困难——我完全有能力使用 String——但是有什么理由将 str 封装在它自己的特殊类型中而不是更通用的 Box类型?如果 的原因,那么答案可能会帮助我模拟如何以不同的方式使用 Box

为什么 str 封装在 String 中而不是 Box<str> 中?这么普通的结构是单纯为了方便打字还是有更深层次的原因?

StringBox<str> 更像 Vec<char> - 它有方法可以在末尾推送更多 char,或者推送整个 [=14] =].它有长度和容量,而不仅仅是长度。像 BoxVec 一样,它拥有它的内容,并将它们放在堆上;与 Box 不同,它还扩展了 str 的功能,超出了其固有属性。

str 主要有 &self 方法,因为它不能改变它包含的任何字符,因为字符的改变可能意味着长度的改变,而且它不能重新分配自己。另一方面,String 类似于 &mut str,因为它提供了操作 str 的方法。

例如,您可以push to it, or replace a section

另一方面,Box<str> 提供了 none 因为它本质上是一个拥有的 str 所以它只提供了我谈到的 &self 方法更早。