string - Rust 中的 `str` 有什么用处吗?
问题描述
有str
没有不借就可以使用的情况?这甚至有意义吗?
我理解 和 之间的区别String
,&str
但是既然有&str
就一定有str
吗?
解决方案
您不能对 type的值str
做很多事情,但是在很多情况下您希望引用 type str
。
Box<str>
orRc<str>
- 拥有的类型,类似于String
,但不能被变异以增长或重新分配任何时候您想要接受可以被视为字符串的任意类型,您都可以使用约束,例如
T: Deref<Target = str>
,T: AsRef<str>
或T: Borrow<str>
. 例如HashMap::get
具有以下签名:pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V> where K: Borrow<Q>, // K is the key type for the HashMap Q: Hash + Eq,
这意味着您可以拥有
HashMap<String, i32>
,但可以使用键访问值&str
,例如map.get("key")
。这里Q
将被推断为str
,但k
参数仍然是&str
(&Q
)。?Sized
注释意味着Q
不需要在编译时知道大小,明确允许使用未调整大小的类型str
。
推荐阅读
- regex - 带有正则表达式的解析器用于查找单词、过滤问题
- python - matplotlib 两种颜色之间的颜色渐变
- python - 如何格式化谷歌分析日期的结果。ga:日期
- amcharts - Amchart:仅显示特定系列的图例
- mysql - 如何在一个 sql 中更新唯一的默认选项
- google-apps-script - 如何根据单元格的值继续删除单元格
- javascript - 向递归函数添加类型
- authentication - 如何在 KONG 中实现外部身份验证?
- android - 具有时间间隔的请求位置更新未在前台服务中获取位置更新?
- python - 如何在 for 循环中创建多索引 pandas 数据框?