Cow: Clone on Write(写时克隆)
昨天我在给deno-drash提的pr提交代码, 发现ci跑unit test失败了, 于是在找错误.
找到deno某个commit的时候, 看到别人的代码, 其中一段用了Cow. 我之前一直没明白Cow平时能在哪用上, 看到这段代码之后突然就懂了其中一个使用场景.
在这样一个场景里:
match有3个分支, 其中两个返回&str, 一个返回String
let var: ? = match() {
A => str1,
B => str2,
C => string3,
}
在以前,我会这么做:
let var: String = ..
...
A => str1.to_string(),
B => str2.to_string(),
C => string3,
这么写的话, A和B的&str转为String的时候, 就必然要复制一次.
但是如果用Cow的话:
let var: Cow<str> = ..
...
A => Cow::Borrowed(str1),
B => Cow::Borrowed(str2),
C => Cow::Owned(string3),
这样子, 只要你后面不更改var的值, 就不会发生内存复制.
技巧+1🤪