为什么to_ascii_lowercase返回一个字符串,而不是牛 ?

问题描述 投票:2回答:1

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

这同样适用于str::to_ascii_uppercase

string rust api-design copy-on-write
1个回答
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())
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.