主要观点:工程师在采用 Rust 时,常对&str和String感到困惑,两者在不同情境下使用,有最优选择。
关键信息:
&str是引用,不拥有字符串内存,大小固定可存于栈,只能在源存活时存在,能转换为String。Vec与slice也有类似情况。- 函数参数:一般接受
&str更宽容,若需String可接受impl Into<String>。 - 函数返回值:两种情况返回
&str,否则返回String。 - 结构体字段:嵌入
&str需与&str来源相关,可提高效率。
重要细节: String有Deref<Target = str>实现,可转换为&str。Into<String>接口允许传入String或&str,传入String时.into()可优化。- 编译器在合适时会强制返回
String。 - 结构体字段中需明确生命周期,
SubstringMatch结构只能在&str存活时存在,避免原始字符串被修改。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。