Cow 的全称是:clone on write。Cow 能够保存一个对象的引用或拥有一个对象的所有权。当通过to_mut 方法获取对象的可变引用时。如果Cow中保存的是Borrowed值,则会通过to_owned方法获取一个副本,然后更新Cow的值。所以说是,clone on write。下面看一下定义:
enum Cow<'a, B: ?Sized + 'a>
where B: ToOwned
{
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}
下面看一个使用实例:
use std::borrow::Cow;
fn get_cow(flag: i32) -> Cow<'static, str> {
match flag {
1 => "1".into(),
2 => "2".into(),
3 => "3".into(),
4 => "4".into(),
_ => format!("{}", "5").into(),
}
}
fn main() {
let s = get_cow(1);
assert_eq!("1", s);
let s = get_cow(5);
assert_eq!("5", s);
}