3

str::to_ascii_lowercase返回一个字符串。为什么它不返回一个Cow<str>就像to_string_lossyor String::from_utf8_lossy

这同样适用于str::to_ascii_uppercase

4

1 回答 1

2

您可能想要返回 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())
    }
}
于 2018-08-17T11:54:14.580 回答