str::to_ascii_lowercase
返回一个字符串。为什么它不像Cow<str>
或to_string_lossy
一样返回String::from_utf8_lossy
?
答案 0 :(得分:1)
大概想返回Cow<str>
的原因是因为字符串已经是小写的。但是,当字符串不是小写时,检测到这种边缘情况也可能导致性能下降,这在直观上似乎是最常见的情况。
您当然可以创建自己的包装to_ascii_lowercase()
的函数,检查它是否已经是小写,然后返回Cow<str>
:
fn my_to_ascii_lowercase<'a>(s: &'a str) -> Cow<'a, str> {
let bytes = s.as_bytes();
if bytes.is_ascii() && bytes.iter().all(u8::is_ascii_lowercase) {
Cow::Borrowed(s)
} else {
Cow::Owned(s.to_ascii_lowercase())
}
}