Function understand_nll

Source
pub fn understand_nll()
Expand description

§理解借用检查 NLL

示例:替换字符串中的问号

fn main(){
    let s = "abc?d";
    let mut chars = s.chars().collect::<Vec<char>>();

    // 处理字符串
    for (i, c) in chars.iter_mut().enumerate() {
        // 定义 a-z 字母集
        let mut words = ('a'..='z').into_iter();
        // 此处 `chars[i]` 是对chars的不可变借用
        if chars[i] == '?' {
            // 此处 `chars[i]` 是对chars的不可变借用
            let left = if i==0 {None} else { Some(chars[i-1]) };
            // 此处 `chars[i]` 是对chars的不可变借用
            let right = if i==s.len()-1 {None} else {Some(chars[i+1])};
            // 此处 `chars[i]` 是对chars的可变借用,要修改chars数组了
            // 从a-z 字母集中查找和左右两边不一样的字母去替换当前字符,避免重复
            chars[i] = words.find(|&w| Some(w) != left && Some(w) != right).unwrap();
        }
    }

    let s = chars.into_iter().collect::<String>();
    println!("{:?}", s);
}