【发布时间】:2019-03-09 22:14:10
【问题描述】:
当使用 cargo build 编译下面这个 sn-p 时,借用检查器似乎很好,但是当使用 rustc 时我得到错误
error[E0502]: cannot borrow `char_counts` as mutable because it is also borrowed as immutable
--> src/lib.rs:14:17
|
10 | let count = char_counts.get(&char);
| ----------- immutable borrow occurs here
...
14 | char_counts.insert(char, rem);
| ^^^^^^^^^^^ mutable borrow occurs here
...
19 | }
| - immutable borrow ends here
任何想法为什么会发生这种情况?
use std::collections::HashMap;
pub fn anagram(word: &str, another_word: &str) -> i32 {
let mut char_counts = HashMap::new();
for char in word.chars() {
let count = char_counts.entry(char).or_insert(0);
*count += 1;
}
for char in another_word.chars() {
let count = char_counts.get(&char);
if let Some(val) = count {
let rem = val - 1;
if rem > 0 {
char_counts.insert(char, rem);
} else {
char_counts.remove(&char);
}
}
}
println!("{:?}", char_counts);
return char_counts.keys().len() as i32;
}
cargo --version 和rustc --version 命令都输出1.33
【问题讨论】:
-
rustc --version和cargo --version的输出是什么? -
两个命令都输出
1.33 -
我观察到相同的行为(Linux,1.33.0 for
rustc)。奇怪的是,如果我这样做rustc --edition 2018 main.rs它会编译。
标签: rust borrow-checker