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);
}