Ben pat_vec
ve str_vec
iki yineleyiciler olan bu kodu vardır:Nasıl Geçici Çözüm Pas'ın HashMap'in borcunu kontrol eder?
let mut pat_mapping: HashMap<char, &str> = HashMap::new();
for combi in pat_vec.zip(str_vec) {
let (c, word) = combi;
match pat_mapping.get(&c) {
Some(phrase) => {
if phrase.to_string() != word.to_string() {
return false;
}
}
None => {
pat_mapping.insert(c, word);
}
}
}
Bu işe yaramazsa ve derleyici şikayet:
cannot borrow `pat_mapping` as mutable because it is also borrowed as immutable [E0502]
Ben pat_mapping.get(&c)
&self
olarak değişmez ödünç çünkü anlamak insert()
yöntemi aynı kapsamda iken, &self
kodunun mutable olarak kullanılması gerekir.
Etrafa bir iş var:
match word_mapping.get(&c) {
Some(phrase) => {
if phrase.to_string() != word.to_string() {
return false;
}
}
None => {
pat_trigger = true;
}
};
if pat_trigger {
pat_mapping.insert(c, word);
}
Ama bir boolean bayrak tanıtan gereksiz olduğunu. Eşleşmeyi yapmak ve aynı kod bloğuna eklemek için borç kontrolünün etrafında çalışmak için bir yol var mı?