Почему этот код Rust 2018 компилируется с `cargo build`, но не использует rustc? - PullRequest
2 голосов
/ 10 марта 2019

При компиляции этого фрагмента ниже с использованием сборки груза, проверка заимствования выглядит нормально, но при использовании 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

1 Ответ

5 голосов
/ 10 марта 2019

Эта функция прекрасно скомпилируется, если у вас включено нелексическое время жизни , и без них не скомпилируется.Издание 2018 года включает их по умолчанию.Возможно, у вас edition = "2018" в вашем Cargo.toml, но вы не передаете его в качестве параметра при прямом использовании rustc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...