首页 > 解决方案 > Rust 中的 `str` 有什么用处吗?

问题描述

str没有不借就可以使用的情况?这甚至有意义吗?

我理解 和 之间的区别String&str但是既然有&str就一定有str吗?

标签: stringrustownership

解决方案


您不能对 type的str做很多事情,但是在很多情况下您希望引用 type str

  • Box<str>or Rc<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


推荐阅读