str::to_ascii_lowercase
返回一个字符串。为什么它不返回Cow<str>
就像to_string_lossy
或String::from_utf8_lossy
?
这同样适用于str::to_ascii_uppercase
。
为什么你可能想大概返回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())
}
}