str::to_ascii_lowercase返回一个字符串。为什么它不返回一个Cow<str>就像to_string_lossyor String::from_utf8_lossy?
这同样适用于str::to_ascii_uppercase。
str::to_ascii_lowercase返回一个字符串。为什么它不返回一个Cow<str>就像to_string_lossyor String::from_utf8_lossy?
这同样适用于str::to_ascii_uppercase。
您可能想要返回 a 的原因Cow<str>大概是因为该字符串可能已经是小写的。但是,当字符串不是小写时,检测这种边缘情况也可能会导致性能下降,这在直觉上似乎是最常见的情况。
当然,您可以创建自己的 wrap 函数to_ascii_lowercase(),检查它是否已经是小写,然后返回 a Cow<str>:
fn my_to_ascii_lowercase<'a>(s: &'a str) -> Cow<'a, str> {
let bytes = s.as_bytes();
if !bytes.iter().any(u8::is_ascii_uppercase) {
Cow::Borrowed(s)
} else {
Cow::Owned(s.to_ascii_lowercase())
}
}