如何从std :: borrow :: Cow <str>获取&amp; str或String?

时间:2017-11-07 00:01:16

标签: string rust concatenation

我有Cow

use std::borrow::Cow;  // Cow = clone on write
let example = Cow::from("def")

我想让def退出,以便将其附加到另一个String

let mut alphabet: String = "ab".to_string();
alphabet.push_str("c");
// here I would like to do:
alphabet.push_str(example);

这不起作用,我在Cow中没有看到适当的方法让&strString退出。

2 个答案:

答案 0 :(得分:9)

  

如何获得&str

  1. 使用Borrow

    use std::borrow::Borrow;
    alphabet.push_str(example.borrow());
    
  2. 使用AsRef

    alphabet.push_str(example.as_ref());
    
  3. 明确使用Deref

    use std::ops::Deref;
    alphabet.push_str(example.deref());
    
  4. 通过胁迫隐含地使用Deref

    alphabet.push_str(&example);
    
  5.   

    如何获得String

    1. 使用ToString

      example.to_string();
      
    2. 使用Cow::into_owned

      example.into_owned();
      
    3. 使用任何方法获取引用,然后调用to_owned

      example.as_ref().to_owned();
      

答案 1 :(得分:4)

将对example(即&example)的引用传递给push_str

let mut alphabet: String = "ab".to_string();
alphabet.push_str("c");  
alphabet.push_str(&example);

这是有效的,因为Cow实现了Deref