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

Lem*_*ism 5 string smart-pointers rust

这并没有给我带来任何麻烦-我完全有能力使用String-但是否有任何原因str封装在其自己的特殊类型中,而不是封装在更一般的Box类型中?如果有原因的,那么答案可能会帮助我的模型如何与工作Box不同。

为什么str封装在内部String而不是内部Box<str>?仅仅是为了方便键入这样一个通用结构还是有更深层次的原因?

Zar*_*nor 7

StringVec<char>比a 更像Box<str>-它具有将chars 推到最后或推到整个的方法str。它具有长度和容量,而不仅仅是长度。像Box和一样Vec,它拥有其内容,并将其放置在堆上;不像Box,它还扩展了str其固有属性之外的功能。

  • @LemmaPrism我出于某种原因对Vec &lt;char&gt; qui之以鼻,出于某种原因更喜欢说Vec &lt;u8&gt;,但是[String **实际上是一个Vec &lt;u8&gt;`](https:// doc.rust-lang.org/1.36.0/src/alloc/string.rs.html#283-285)。来源是开放的,并且也从文档链接;随时浏览。 (3认同)

Opt*_*ach 5

str主要具有&self方法,因为它不能更改其包含的任何字符,因为字符的更改可能意味着长度的更改,并且不能重新分配自身。另一方面,String它就像a一样,&mut str因为它提供了操作strs的方法。

例如,您可以推入,或替换一个section

另一方面,a Box<str>根本不提供任何东西,因为它本质上是拥有的str,因此仅提供了&self我之前提到的方法。