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使用。