我有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
中没有看到适当的方法让&str
或String
退出。
答案 0 :(得分:9)
如何获得
&str
使用Borrow
:
use std::borrow::Borrow;
alphabet.push_str(example.borrow());
使用AsRef
:
alphabet.push_str(example.as_ref());
明确使用Deref
:
use std::ops::Deref;
alphabet.push_str(example.deref());
通过胁迫隐含地使用Deref
:
alphabet.push_str(&example);
如何获得
String
使用ToString
:
example.to_string();
使用Cow::into_owned
:
example.into_owned();
使用任何方法获取引用,然后调用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
。